Added RC_NOT_CONNECTED which is used to check the return value of rcGetCon()

This commit is contained in:
Mikko Mononen 2009-11-15 11:24:20 +00:00
parent f29a51b612
commit 14d1c97f1a
8 changed files with 1062 additions and 882 deletions

View File

@ -108,6 +108,7 @@ struct rcCompactHeightfield
delete [] spans;
delete [] dist;
delete [] reg;
delete [] flags;
}
int width, height; // Width and height of the heighfield.
int spanCount; // Number of spans in the heightfield.
@ -120,6 +121,7 @@ struct rcCompactHeightfield
rcCompactSpan* spans; // Pointer to spans.
unsigned short* dist; // Pointer to per span distance to border.
unsigned short* reg; // Pointer to per span region ID.
unsigned short* flags; // Pointer to per span flags.
};
struct rcContour
@ -240,7 +242,17 @@ static const unsigned short RC_BORDER_REG = 0x8000;
// removed in order to match the segments and vertices at tile boundaries.
static const int RC_BORDER_VERTEX = 0x10000;
// Value returned by rcGetCon() if the direction is not connected.
static const int RC_NOT_CONNECTED = 0xf;
// Compact span neighbour helpers.
inline void rcSetCon(rcCompactSpan& s, int dir, int i)
{
s.con &= ~(0xf << (dir*4));
s.con |= (i&0xf) << (dir*4);
}
inline int rcGetCon(const rcCompactSpan& s, int dir)
{
return (s.con >> (dir*4)) & 0xf;

View File

@ -124,12 +124,6 @@ static int getSpanCount(unsigned char flags, rcHeightfield& hf)
return spanCount;
}
inline void setCon(rcCompactSpan& s, int dir, int i)
{
s.con &= ~(0xf << (dir*4));
s.con |= (i&0xf) << (dir*4);
}
bool rcBuildCompactHeightfield(const int walkableHeight, const int walkableClimb,
unsigned char flags, rcHeightfield& hf,
rcCompactHeightfield& chf)
@ -168,6 +162,14 @@ bool rcBuildCompactHeightfield(const int walkableHeight, const int walkableClimb
return false;
}
memset(chf.spans, 0, sizeof(rcCompactSpan)*spanCount);
chf.flags = new unsigned short[spanCount];
if (!chf.flags)
{
if (rcGetLog())
rcGetLog()->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.flags' (%d)", spanCount);
return false;
}
memset(chf.flags, 0, sizeof(unsigned short)*spanCount);
const int MAX_HEIGHT = 0xffff;
@ -211,7 +213,7 @@ bool rcBuildCompactHeightfield(const int walkableHeight, const int walkableClimb
for (int dir = 0; dir < 4; ++dir)
{
setCon(s, dir, 0xf);
rcSetCon(s, dir, RC_NOT_CONNECTED);
const int nx = x + rcGetDirOffsetX(dir);
const int ny = y + rcGetDirOffsetY(dir);
// First check that the neighbour cell is in bounds.
@ -232,10 +234,13 @@ bool rcBuildCompactHeightfield(const int walkableHeight, const int walkableClimb
if ((top - bot) >= walkableHeight && rcAbs((int)ns.y - (int)s.y) <= walkableClimb)
{
// Mark direction as walkable.
setCon(s, dir, k - (int)nc.index);
rcSetCon(s, dir, k - (int)nc.index);
break;
}
}
}
}
}

View File

@ -37,7 +37,7 @@ static int getCornerHeight(int x, int y, int i, int dir,
regs[0] = chf.reg[i];
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
@ -45,7 +45,7 @@ static int getCornerHeight(int x, int y, int i, int dir,
const rcCompactSpan& as = chf.spans[ai];
ch = rcMax(ch, (int)as.y);
regs[1] = chf.reg[ai];
if (rcGetCon(as, dirp) != 0xf)
if (rcGetCon(as, dirp) != RC_NOT_CONNECTED)
{
const int ax2 = ax + rcGetDirOffsetX(dirp);
const int ay2 = ay + rcGetDirOffsetY(dirp);
@ -55,7 +55,7 @@ static int getCornerHeight(int x, int y, int i, int dir,
regs[2] = chf.reg[ai2];
}
}
if (rcGetCon(s, dirp) != 0xf)
if (rcGetCon(s, dirp) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dirp);
const int ay = y + rcGetDirOffsetY(dirp);
@ -63,7 +63,7 @@ static int getCornerHeight(int x, int y, int i, int dir,
const rcCompactSpan& as = chf.spans[ai];
ch = rcMax(ch, (int)as.y);
regs[3] = chf.reg[ai];
if (rcGetCon(as, dir) != 0xf)
if (rcGetCon(as, dir) != RC_NOT_CONNECTED)
{
const int ax2 = ax + rcGetDirOffsetX(dir);
const int ay2 = ay + rcGetDirOffsetY(dir);
@ -127,7 +127,7 @@ static void walkContour(int x, int y, int i,
}
int r = 0;
const rcCompactSpan& s = chf.spans[i];
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
@ -150,7 +150,7 @@ static void walkContour(int x, int y, int i,
const int nx = x + rcGetDirOffsetX(dir);
const int ny = y + rcGetDirOffsetY(dir);
const rcCompactSpan& s = chf.spans[i];
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const rcCompactCell& nc = chf.cells[nx+ny*chf.width];
ni = (int)nc.index + rcGetCon(s, dir);
@ -579,7 +579,7 @@ bool rcBuildContours(rcCompactHeightfield& chf,
for (int dir = 0; dir < 4; ++dir)
{
unsigned short r = 0;
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);

View File

@ -803,7 +803,7 @@ static void getHeightData(const rcCompactHeightfield& chf,
for (int dir = 0; dir < 4; ++dir)
{
if (rcGetCon(cs, dir) == 0xf) continue;
if (rcGetCon(cs, dir) == RC_NOT_CONNECTED) continue;
const int ax = cx + rcGetDirOffsetX(dir);
const int ay = cy + rcGetDirOffsetY(dir);

View File

@ -50,7 +50,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
int nc = 0;
for (int dir = 0; dir < 4; ++dir)
{
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
nc++;
}
if (nc != 4)
@ -69,7 +69,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
{
const rcCompactSpan& s = chf.spans[i];
if (rcGetCon(s, 0) != 0xf)
if (rcGetCon(s, 0) != RC_NOT_CONNECTED)
{
// (-1,0)
const int ax = x + rcGetDirOffsetX(0);
@ -80,7 +80,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
src[i] = src[ai]+2;
// (-1,-1)
if (rcGetCon(as, 3) != 0xf)
if (rcGetCon(as, 3) != RC_NOT_CONNECTED)
{
const int aax = ax + rcGetDirOffsetX(3);
const int aay = ay + rcGetDirOffsetY(3);
@ -89,7 +89,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
src[i] = src[aai]+3;
}
}
if (rcGetCon(s, 3) != 0xf)
if (rcGetCon(s, 3) != RC_NOT_CONNECTED)
{
// (0,-1)
const int ax = x + rcGetDirOffsetX(3);
@ -100,7 +100,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
src[i] = src[ai]+2;
// (1,-1)
if (rcGetCon(as, 2) != 0xf)
if (rcGetCon(as, 2) != RC_NOT_CONNECTED)
{
const int aax = ax + rcGetDirOffsetX(2);
const int aay = ay + rcGetDirOffsetY(2);
@ -123,7 +123,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
{
const rcCompactSpan& s = chf.spans[i];
if (rcGetCon(s, 2) != 0xf)
if (rcGetCon(s, 2) != RC_NOT_CONNECTED)
{
// (1,0)
const int ax = x + rcGetDirOffsetX(2);
@ -134,7 +134,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
src[i] = src[ai]+2;
// (1,1)
if (rcGetCon(as, 1) != 0xf)
if (rcGetCon(as, 1) != RC_NOT_CONNECTED)
{
const int aax = ax + rcGetDirOffsetX(1);
const int aay = ay + rcGetDirOffsetY(1);
@ -143,7 +143,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
src[i] = src[aai]+3;
}
}
if (rcGetCon(s, 1) != 0xf)
if (rcGetCon(s, 1) != RC_NOT_CONNECTED)
{
// (0,1)
const int ax = x + rcGetDirOffsetX(1);
@ -154,7 +154,7 @@ static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
src[i] = src[ai]+2;
// (-1,1)
if (rcGetCon(as, 0) != 0xf)
if (rcGetCon(as, 0) != RC_NOT_CONNECTED)
{
const int aax = ax + rcGetDirOffsetX(0);
const int aay = ay + rcGetDirOffsetY(0);
@ -201,7 +201,7 @@ static unsigned short* boxBlur(rcCompactHeightfield& chf, int thr,
int d = cd;
for (int dir = 0; dir < 4; ++dir)
{
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
@ -210,7 +210,7 @@ static unsigned short* boxBlur(rcCompactHeightfield& chf, int thr,
const rcCompactSpan& as = chf.spans[ai];
const int dir2 = (dir+1) & 0x3;
if (rcGetCon(as, dir2) != 0xf)
if (rcGetCon(as, dir2) != RC_NOT_CONNECTED)
{
const int ax2 = ax + rcGetDirOffsetX(dir2);
const int ay2 = ay + rcGetDirOffsetY(dir2);
@ -267,7 +267,7 @@ static bool floodRegion(int x, int y, int i,
for (int dir = 0; dir < 4; ++dir)
{
// 8 connected
if (rcGetCon(cs, dir) != 0xf)
if (rcGetCon(cs, dir) != RC_NOT_CONNECTED)
{
const int ax = cx + rcGetDirOffsetX(dir);
const int ay = cy + rcGetDirOffsetY(dir);
@ -279,7 +279,7 @@ static bool floodRegion(int x, int y, int i,
const rcCompactSpan& as = chf.spans[ai];
const int dir2 = (dir+1) & 0x3;
if (rcGetCon(as, dir2) != 0xf)
if (rcGetCon(as, dir2) != RC_NOT_CONNECTED)
{
const int ax2 = ax + rcGetDirOffsetX(dir2);
const int ay2 = ay + rcGetDirOffsetY(dir2);
@ -301,7 +301,7 @@ static bool floodRegion(int x, int y, int i,
// Expand neighbours.
for (int dir = 0; dir < 4; ++dir)
{
if (rcGetCon(cs, dir) != 0xf)
if (rcGetCon(cs, dir) != RC_NOT_CONNECTED)
{
const int ax = cx + rcGetDirOffsetX(dir);
const int ay = cy + rcGetDirOffsetY(dir);
@ -376,7 +376,7 @@ static unsigned short* expandRegions(int maxIter, unsigned short level,
const rcCompactSpan& s = chf.spans[i];
for (int dir = 0; dir < 4; ++dir)
{
if (rcGetCon(s, dir) == 0xf) continue;
if (rcGetCon(s, dir) == RC_NOT_CONNECTED) continue;
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir);
@ -569,7 +569,7 @@ static bool isSolidEdge(rcCompactHeightfield& chf, unsigned short* srcReg,
{
const rcCompactSpan& s = chf.spans[i];
unsigned short r = 0;
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
@ -591,7 +591,7 @@ static void walkContour(int x, int y, int i, int dir,
const rcCompactSpan& ss = chf.spans[i];
unsigned short curReg = 0;
if (rcGetCon(ss, dir) != 0xf)
if (rcGetCon(ss, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
@ -609,7 +609,7 @@ static void walkContour(int x, int y, int i, int dir,
{
// Choose the edge corner
unsigned short r = 0;
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(dir);
const int ay = y + rcGetDirOffsetY(dir);
@ -629,7 +629,7 @@ static void walkContour(int x, int y, int i, int dir,
int ni = -1;
const int nx = x + rcGetDirOffsetX(dir);
const int ny = y + rcGetDirOffsetY(dir);
if (rcGetCon(s, dir) != 0xf)
if (rcGetCon(s, dir) != RC_NOT_CONNECTED)
{
const rcCompactCell& nc = chf.cells[nx+ny*chf.width];
ni = (int)nc.index + rcGetCon(s, dir);
@ -1027,7 +1027,7 @@ bool rcBuildRegionsMonotone(rcCompactHeightfield& chf,
// -x
unsigned short previd = 0;
if (rcGetCon(s, 0) != 0xf)
if (rcGetCon(s, 0) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(0);
const int ay = y + rcGetDirOffsetY(0);
@ -1045,7 +1045,7 @@ bool rcBuildRegionsMonotone(rcCompactHeightfield& chf,
}
// -y
if (rcGetCon(s,3) != 0xf)
if (rcGetCon(s,3) != RC_NOT_CONNECTED)
{
const int ax = x + rcGetDirOffsetX(3);
const int ay = y + rcGetDirOffsetY(3);

File diff suppressed because it is too large Load Diff

View File

@ -279,14 +279,14 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>26</integer>
<integer>28</integer>
<integer>18</integer>
<integer>1</integer>
<integer>0</integer>
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
<string>{{0, 280}, {282, 660}}</string>
<string>{{0, 125}, {282, 660}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@ -321,7 +321,7 @@
<key>PBXProjectModuleGUID</key>
<string>6B8632A30F78115100E2684A</string>
<key>PBXProjectModuleLabel</key>
<string>RecastMeshDetail.cpp</string>
<string>Recast.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -329,33 +329,43 @@
<key>PBXProjectModuleGUID</key>
<string>6B8632A40F78115100E2684A</string>
<key>PBXProjectModuleLabel</key>
<string>RecastMeshDetail.cpp</string>
<string>Recast.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>6B7FB7461091E02E001BA51A</string>
<string>6B8DE74910B01BE900DF20FB</string>
<key>history</key>
<array>
<string>6B6FA3B31076452F009B0572</string>
<string>6B6FA3B41076452F009B0572</string>
<string>6B6FA3B61076452F009B0572</string>
<string>6B3BFADD107A80E1006284CD</string>
<string>6B3BFB0C107A8979006284CD</string>
<string>6B3BFB0D107A8979006284CD</string>
<string>6B9BE372107BC6A40036CC81</string>
<string>6B57D358108C66B200DDD053</string>
<string>6B57D372108C692900DDD053</string>
<string>6B57D38F108C69E400DDD053</string>
<string>6B57D391108C69E400DDD053</string>
<string>6B7FB7351091DD43001BA51A</string>
<string>6B7FB7451091E02E001BA51A</string>
<string>6B7FB74A1091EBDE001BA51A</string>
<string>6B7FB74D1091EBDE001BA51A</string>
<string>6B8DE6FE10B01BBF00DF20FB</string>
<string>6B8DE6FF10B01BBF00DF20FB</string>
<string>6B8DE70010B01BBF00DF20FB</string>
<string>6B8DE70110B01BBF00DF20FB</string>
<string>6B8DE70310B01BBF00DF20FB</string>
<string>6B8DE70410B01BBF00DF20FB</string>
<string>6B8DE70510B01BBF00DF20FB</string>
<string>6B8DE70610B01BBF00DF20FB</string>
<string>6B8DE70710B01BBF00DF20FB</string>
<string>6B8DE70810B01BBF00DF20FB</string>
<string>6B8DE70910B01BBF00DF20FB</string>
<string>6B8DE70A10B01BBF00DF20FB</string>
<string>6B8DE70B10B01BBF00DF20FB</string>
<string>6B8DE70C10B01BBF00DF20FB</string>
<string>6B8DE70D10B01BBF00DF20FB</string>
<string>6B8DE73D10B01BBF00DF20FB</string>
</array>
<key>prevStack</key>
<array>
<string>6B6FA3611070C102009B0572</string>
<string>6B6FA36B1070C1F7009B0572</string>
<string>6B6FA3B81076452F009B0572</string>
<string>6B6FA3B91076452F009B0572</string>
<string>6B6FA3BA1076452F009B0572</string>
<string>6B6FA3BC1076452F009B0572</string>
<string>6B3BFADF107A80E1006284CD</string>
@ -365,8 +375,48 @@
<string>6B57D35B108C66B200DDD053</string>
<string>6B57D376108C692900DDD053</string>
<string>6B57D393108C69E400DDD053</string>
<string>6B7FB7371091DD43001BA51A</string>
<string>6B7FB7381091DD43001BA51A</string>
<string>6B7FB7531091EBDE001BA51A</string>
<string>6B7FB7541091EBDE001BA51A</string>
<string>6B7FB7571091EBDE001BA51A</string>
<string>6B8DE71110B01BBF00DF20FB</string>
<string>6B8DE71210B01BBF00DF20FB</string>
<string>6B8DE71310B01BBF00DF20FB</string>
<string>6B8DE71410B01BBF00DF20FB</string>
<string>6B8DE71510B01BBF00DF20FB</string>
<string>6B8DE71710B01BBF00DF20FB</string>
<string>6B8DE71810B01BBF00DF20FB</string>
<string>6B8DE71910B01BBF00DF20FB</string>
<string>6B8DE71A10B01BBF00DF20FB</string>
<string>6B8DE71B10B01BBF00DF20FB</string>
<string>6B8DE71C10B01BBF00DF20FB</string>
<string>6B8DE71D10B01BBF00DF20FB</string>
<string>6B8DE71E10B01BBF00DF20FB</string>
<string>6B8DE71F10B01BBF00DF20FB</string>
<string>6B8DE72010B01BBF00DF20FB</string>
<string>6B8DE72110B01BBF00DF20FB</string>
<string>6B8DE72210B01BBF00DF20FB</string>
<string>6B8DE72310B01BBF00DF20FB</string>
<string>6B8DE72410B01BBF00DF20FB</string>
<string>6B8DE72510B01BBF00DF20FB</string>
<string>6B8DE72610B01BBF00DF20FB</string>
<string>6B8DE72810B01BBF00DF20FB</string>
<string>6B8DE72A10B01BBF00DF20FB</string>
<string>6B8DE72B10B01BBF00DF20FB</string>
<string>6B8DE72D10B01BBF00DF20FB</string>
<string>6B8DE72E10B01BBF00DF20FB</string>
<string>6B8DE72F10B01BBF00DF20FB</string>
<string>6B8DE73010B01BBF00DF20FB</string>
<string>6B8DE73110B01BBF00DF20FB</string>
<string>6B8DE73210B01BBF00DF20FB</string>
<string>6B8DE73310B01BBF00DF20FB</string>
<string>6B8DE73410B01BBF00DF20FB</string>
<string>6B8DE73510B01BBF00DF20FB</string>
<string>6B8DE73610B01BBF00DF20FB</string>
<string>6B8DE73710B01BBF00DF20FB</string>
<string>6B8DE73810B01BBF00DF20FB</string>
<string>6B8DE73910B01BBF00DF20FB</string>
<string>6B8DE73A10B01BBF00DF20FB</string>
<string>6B8DE73B10B01BBF00DF20FB</string>
</array>
</dict>
<key>SplitCount</key>
@ -380,18 +430,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {976, 551}}</string>
<string>{{0, 0}, {976, 434}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1280 719 0 0 1280 778 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>551pt</string>
<string>434pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>122pt</string>
<string>239pt</string>
<key>Tabs</key>
<array>
<dict>
@ -405,7 +455,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {976, 145}}</string>
<string>{{10, 27}, {976, -27}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -421,7 +471,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {976, 166}}</string>
<string>{{10, 27}, {976, 212}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1280 719 0 0 1280 778 </string>
</dict>
<key>Module</key>
<string>PBXProjectFindModule</string>
@ -459,9 +511,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {976, 95}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1280 719 0 0 1280 778 </string>
<string>{{10, 27}, {976, 155}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -489,11 +539,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>6B7FB6F31091CF16001BA51A</string>
<string>6B8DE73F10B01BBF00DF20FB</string>
<string>1CA23ED40692098700951B8B</string>
<string>6B7FB6F41091CF16001BA51A</string>
<string>6B8DE74010B01BBF00DF20FB</string>
<string>6B8632A30F78115100E2684A</string>
<string>6B7FB6F51091CF16001BA51A</string>
<string>6B8DE74110B01BBF00DF20FB</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -640,14 +690,14 @@
</array>
<key>TableOfContents</key>
<array>
<string>6B7FB6F61091CF16001BA51A</string>
<string>6B8DE74210B01BBF00DF20FB</string>
<string>1CCC7628064C1048000F2A68</string>
<string>1CCC7629064C1048000F2A68</string>
<string>6B7FB6F71091CF16001BA51A</string>
<string>6B7FB6F81091CF16001BA51A</string>
<string>6B7FB6F91091CF16001BA51A</string>
<string>6B7FB6FA1091CF16001BA51A</string>
<string>6B7FB6FB1091CF16001BA51A</string>
<string>6B8DE74310B01BBF00DF20FB</string>
<string>6B8DE74410B01BBF00DF20FB</string>
<string>6B8DE74510B01BBF00DF20FB</string>
<string>6B8DE74610B01BBF00DF20FB</string>
<string>6B8DE74710B01BBF00DF20FB</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>