00000000 00000018 00000030 00000048 00000060 00000078 00000090 000000A8 000000C0 000000D8 000000F0 00000108 00000120 00000138 00000150 00000168 00000180 00000198 000001B0 000001C8 000001E0 000001F8 00000210 00000228 00000240 00000258 00000270 00000288 000002A0 000002B8 000002D0 000002E8 00000300 00000318 00000330 00000348 00000360 00000378 00000390 000003A8 000003C0 000003D8 000003F0 00000408 00000420 00000438 00000450 00000468 00000480 00000498 000004B0 000004C8 000004E0 000004F8 00000510 00000528 00000540 00000558 00000570 00000588 000005A0 000005B8 000005D0 000005E8 00000600 00000618 00000630 00000648 00000660 00000678 00000690 000006A8 000006C0 000006D8 000006F0 00000708 00000720 00000738 00000750 00000768 00000780 00000798 000007B0 000007C8 000007E0 000007F8 00000810 00000828 00000840 00000858 00000870 00000888 000008A0 000008B8 000008D0 000008E8 00000900 00000918 00000930 00000948 00000960 00000978 00000990 000009A8 000009C0 000009D8 000009F0 00000A08 00000A20 00000A38 00000A50 00000A68 00000A80 00000A98 00000AB0 00000AC8 00000AE0 00000AF8 00000B10 00000B28 00000B40 00000B58 00000B70 00000B88 00000BA0 00000BB8 00000BD0 00000BE8 00000C00 00000C18 00000C30 00000C48 00000C60 00000C78 00000C90 00000CA8 00000CC0 00000CD8 00000CF0 00000D08 00000D20 00000D38 00000D50 00000D68 00000D80 00000D98 00000DB0 00000DC8 00000DE0 00000DF8 00000E10 00000E28 00000E40 00000E58 00000E70 00000E88 00000EA0 00000EB8 00000ED0 00000EE8 00000F00 00000F18 00000F30 00000F48 00000F60 00000F78 00000F90 00000FA8 00000FC0 00000FD8 00000FF0 00001008 00001020 00001038 00001050 00001068 00001080 00001098 000010B0 000010C8 000010E0 000010F8 00001110 00001128 00001140 00001158 00001170 00001188 000011A0 000011B8 000011D0 000011E8 00001200 00001218 00001230 00001248 00001260 00001278 00001290 000012A8 000012C0 000012D8 000012F0 00001308 00001320 00001338 00001350 00001368 00001380 00001398 000013B0 000013C8 000013E0 000013F8 00001410 00001428 00001440 00001458 00001470 00001488 000014A0 000014B8 000014D0 000014E8 00001500 00001518 00001530 00001548 00001560 00001578 00001590 000015A8 000015C0 000015D8 000015F0 00001608 00001620 00001638 00001650 00001668 00001680 00001698 000016B0 000016C8 000016E0 000016F8 00001710 00001728 00001740 00001758 00001770 00001788 000017A0 000017B8 000017D0 000017E8 00001800 00001818 00001830 00001848 00001860 00001878 00001890 000018A8 000018C0 000018D8 000018F0 00001908 00001920 00001938 00001950 00001968 00001980 00001998 000019B0 000019C8 000019E0 000019F8 00001A10 00001A28 00001A40 00001A58 00001A70 00001A88 00001AA0 00001AB8 00001AD0 00001AE8 00001B00 00001B18 00001B30 00001B48 00001B60 00001B78 00001B90 00001BA8 00001BC0 00001BD8 00001BF0 00001C08 00001C20 00001C38 00001C50 00001C68 00001C80 00001C98 00001CB0 00001CC8 00001CE0 00001CF8 00001D10 00001D28 00001D40 00001D58 00001D70 00001D88 00001DA0 00001DB8 00001DD0 00001DE8 00001E00 00001E18 00001E30 00001E48 00001E60 00001E78 00001E90 00001EA8 00001EC0 00001ED8 00001EF0 00001F08 00001F20 00001F38 00001F50 00001F68 00001F80 00001F98 00001FB0 00001FC8 00001FE0 00001FF8 00002010 00002028 00002040 00002058 00002070 00002088 000020A0 000020B8 000020D0 000020E8 00002100 00002118 00002130 00002148 00002160 00002178 00002190 000021A8 000021C0 000021D8 000021F0 00002208 00002220 00002238 00002250 00002268 00002280 00002298 000022B0 000022C8 000022E0 000022F8 00002310 00002328 00002340 00002358 00002370 00002388 000023A0 000023B8 000023D0 000023E8 00002400 00002418 00002430 00002448 00002460 00002478 00002490 000024A8 000024C0 000024D8 000024F0 00002508 00002520 00002538 00002550 00002568 00002580 00002598 000025B0 000025C8 000025E0 000025F8 00002610 00002628 00002640 00002658 00002670 00002688 000026A0 000026B8 000026D0 000026E8 00002700 00002718 00002730 00002748 00002760 00002778 00002790 000027A8 000027C0 000027D8 000027F0 00002808 00002820 00002838 00002850 00002868 00002880 00002898 000028B0 000028C8 000028E0 000028F8 00002910 00002928 00002940 00002958 00002970 00002988 000029A0 000029B8 000029D0 000029E8 00002A00 00002A18 00002A30 00002A48 00002A60 00002A78 00002A90 00002AA8 00002AC0 00002AD8 00002AF0 00002B08 00002B20 00002B38 00002B50 00002B68 00002B80 00002B98 00002BB0 00002BC8 00002BE0 00002BF8 00002C10 00002C28 00002C40 00002C58 00002C70 00002C88 00002CA0 00002CB8 00002CD0 00002CE8 00002D00 00002D18 00002D30 00002D48 00002D60 00002D78 00002D90 00002DA8 00002DC0 00002DD8 00002DF0 00002E08 00002E20 00002E38 00002E50 00002E68 00002E80 00002E98 00002EB0 00002EC8 00002EE0 00002EF8 00002F10 00002F28 00002F40 00002F58 00002F70 00002F88 00002FA0 00002FB8 00002FD0 00002FE8 00003000 00003018 00003030 00003048 00003060 00003078 00003090 000030A8 000030C0 000030D8 000030F0 00003108 00003120 00003138 00003150 00003168 00003180 00003198 000031B0 000031C8 000031E0 000031F8 00003210 00003228 00003240 00003258 00003270 00003288 000032A0 000032B8 000032D0 000032E8 00003300 00003318 00003330 00003348 00003360 00003378 00003390 000033A8 000033C0 000033D8 000033F0 00003408 00003420 00003438 00003450 00003468 00003480 00003498 000034B0 000034C8 000034E0 000034F8 00003510 00003528 00003540 00003558 00003570 00003588 000035A0 000035B8 000035D0 000035E8 00003600 00003618 00003630 00003648 00003660 00003678 00003690 000036A8 000036C0 000036D8 000036F0 00003708 00003720 00003738 00003750 00003768 00003780 00003798 000037B0 000037C8 000037E0 000037F8 00003810 00003828 00003840 00003858 00003870 00003888 000038A0 000038B8 000038D0 000038E8 00003900 00003918 00003930 00003948 00003960 00003978 00003990 000039A8 000039C0 000039D8 000039F0 00003A08 00003A20 00003A38 00003A50 00003A68 00003A80 00003A98 00003AB0 00003AC8 00003AE0 00003AF8 00003B10 00003B28 00003B40 00003B58 00003B70 00003B88 00003BA0 00003BB8 00003BD0 00003BE8 00003C00 00003C18 00003C30 00003C48 00003C60 00003C78 00003C90 00003CA8 00003CC0 00003CD8 00003CF0 00003D08 00003D20 00003D38 00003D50 00003D68 00003D80 00003D98 00003DB0 00003DC8 00003DE0 00003DF8 00003E10 00003E28 00003E40 00003E58 00003E70 00003E88 00003EA0 00003EB8 00003ED0 00003EE8 00003F00 00003F18 00003F30 00003F48 00003F60 00003F78 00003F90 00003FA8 00003FC0 00003FD8 00003FF0 00004008 00004020 00004038 00004050 00004068 00004080 00004098 000040B0 000040C8 000040E0 000040F8 00004110 00004128 00004140 00004158 00004170 00004188 000041A0 000041B8 000041D0 000041E8 00004200 00004218 00004230 00004248 00004260 00004278 00004290 000042A8 000042C0 000042D8 000042F0 00004308 00004320 00004338 00004350 00004368 00004380 00004398 000043B0 000043C8 000043E0 000043F8 00004410 00004428 00004440 00004458 00004470 00004488 000044A0 000044B8 000044D0 000044E8 00004500 00004518 00004530 00004548 00004560 00004578 00004590 000045A8 000045C0 000045D8 000045F0 00004608 00004620 00004638 00004650 00004668 00004680 00004698 000046B0 000046C8 000046E0 000046F8 00004710 00004728 00004740 00004758 00004770 00004788 000047A0 000047B8 000047D0 000047E8 00004800 00004818 00004830 00004848 00004860 00004878 00004890 000048A8 000048C0 000048D8 000048F0 00004908 00004920 00004938 00004950 00004968 00004980 00004998 000049B0 000049C8 000049E0 000049F8 00004A10 00004A28 00004A40 00004A58 00004A70 00004A88 00004AA0 00004AB8 00004AD0 00004AE8 00004B00 00004B18 00004B30 00004B48 00004B60 00004B78 00004B90 00004BA8 00004BC0 00004BD8 00004BF0 00004C08 00004C20 00004C38 00004C50 00004C68 00004C80 00004C98 00004CB0 00004CC8 00004CE0 00004CF8 00004D10 00004D28 00004D40 00004D58 00004D70 00004D88 00004DA0 00004DB8 00004DD0 00004DE8 00004E00 00004E18 00004E30 00004E48 00004E60 00004E78 00004E90 00004EA8 00004EC0 00004ED8 00004EF0 00004F08 00004F20 00004F38 00004F50 00004F68 00004F80 00004F98 00004FB0 00004FC8 00004FE0 00004FF8 00005010 00005028 00005040 00005058 00005070 00005088 000050A0 000050B8 000050D0 000050E8 00005100 00005118 00005130 00005148 00005160 00005178 00005190 000051A8 000051C0 000051D8 000051F0 00005208 00005220 00005238 00005250 00005268 00005280 00005298 000052B0 000052C8 000052E0 000052F8 00005310 00005328 00005340 00005358 00005370 00005388 000053A0 000053B8 000053D0 000053E8 00005400 00005418 00005430 00005448 00005460 00005478 00005490 000054A8 000054C0 000054D8 000054F0 00005508 00005520 00005538 00005550 00005568 00005580 00005598 000055B0 000055C8 000055E0 000055F8 00005610 00005628 00005640 00005658 00005670 00005688 000056A0 000056B8 000056D0 000056E8 00005700 00005718 00005730 00005748 00005760 00005778 00005790 000057A8 000057C0 000057D8 000057F0 00005808 00005820 00005838 00005850 00005868 00005880 00005898 000058B0 000058C8 000058E0 000058F8 00005910 00005928 00005940 00005958 00005970 00005988 000059A0 000059B8 000059D0 000059E8 00005A00 00005A18 00005A30 00005A48 00005A60 00005A78 00005A90 00005AA8 00005AC0 00005AD8 00005AF0 00005B08 00005B20 00005B38 00005B50 00005B68 00005B80 00005B98 00005BB0 00005BC8 00005BE0 00005BF8 00005C10 00005C28 00005C40 00005C58 00005C70 00005C88 00005CA0 00005CB8 00005CD0 00005CE8 00005D00 00005D18 00005D30 00005D48 00005D60 00005D78 00005D90 00005DA8 00005DC0 00005DD8 00005DF0 00005E08 00005E20 00005E38 00005E50 00005E68 00005E80 00005E98 00005EB0 00005EC8 00005EE0 00005EF8 00005F10 00005F28 00005F40 00005F58 00005F70 00005F88 00005FA0 00005FB8 00005FD0 00005FE8 00006000 00006018 00006030 00006048 00006060 00006078 00006090 000060A8 000060C0 000060D8 000060F0 00006108 00006120 00006138 00006150 00006168 00006180 00006198 000061B0 000061C8 000061E0 000061F8 00006210 00006228 00006240 00006258 00006270 00006288 000062A0 000062B8 000062D0 000062E8 00006300 00006318 00006330 00006348 00006360 00006378 00006390 000063A8 000063C0 000063D8 000063F0 00006408 00006420 00006438 00006450 00006468 00006480 00006498 000064B0 000064C8 000064E0 000064F8 00006510 00006528 00006540 00006558 00006570 00006588 000065A0 000065B8 000065D0 000065E8 00006600 00006618 00006630 00006648 00006660 00006678 00006690 000066A8 000066C0 000066D8 000066F0 00006708 00006720 00006738 00006750 00006768 00006780 00006798 000067B0 000067C8 000067E0 000067F8 00006810 00006828 00006840 00006858 00006870 00006888 000068A0 000068B8 000068D0 000068E8 00006900 00006918 00006930 00006948 00006960 00006978 00006990 000069A8 000069C0 000069D8 000069F0 00006A08 00006A20 00006A38 00006A50 00006A68 00006A80 00006A98 00006AB0 00006AC8 00006AE0 00006AF8 00006B10 00006B28 00006B40 00006B58 00006B70 00006B88 00006BA0 00006BB8 00006BD0 00006BE8 00006C00 00006C18 00006C30 00006C48 00006C60 00006C78 00006C90 00006CA8 00006CC0 00006CD8 00006CF0 00006D08 00006D20 00006D38 00006D50 00006D68 00006D80 00006D98 00006DB0 00006DC8 00006DE0 00006DF8 00006E10 00006E28 00006E40 00006E58 00006E70 00006E88 00006EA0 00006EB8 00006ED0 00006EE8 00006F00 00006F18 00006F30 00006F48 00006F60 00006F78 00006F90 00006FA8 00006FC0 00006FD8 00006FF0 00007008 00007020 00007038 00007050 00007068 00007080 00007098 000070B0 000070C8 000070E0 000070F8 00007110 00007128 00007140 00007158 00007170 00007188 000071A0 000071B8 000071D0 000071E8 00007200 00007218 00007230 00007248 00007260 00007278 00007290 000072A8 000072C0 000072D8 000072F0 00007308 00007320 00007338 00007350 00007368 00007380 00007398 000073B0 000073C8 000073E0 000073F8 00007410 00007428 00007440 00007458 00007470 00007488 000074A0 000074B8 000074D0 000074E8 00007500 00007518 00007530 00007548 00007560 00007578 00007590 000075A8 000075C0 000075D8 000075F0 00007608 00007620 00007638 00007650 00007668 00007680 00007698 000076B0 000076C8 000076E0 000076F8 00007710 00007728 00007740 00007758 00007770 00007788 000077A0 000077B8 000077D0 000077E8 00007800 00007818 00007830 00007848 00007860 00007878 00007890 000078A8 000078C0 000078D8 000078F0 00007908 00007920 00007938 00007950 00007968 00007980 00007998 000079B0 000079C8 000079E0 000079F8 00007A10 00007A28 00007A40 00007A58 00007A70 00007A88 00007AA0 00007AB8 00007AD0 00007AE8 00007B00 00007B18 00007B30 00007B48 00007B60 00007B78 00007B90 00007BA8 00007BC0 00007BD8 00007BF0 00007C08 00007C20 00007C38 00007C50 00007C68 00007C80 00007C98 00007CB0 00007CC8 00007CE0 00007CF8 00007D10 00007D28 00007D40 00007D58 00007D70 00007D88 00007DA0 00007DB8 00007DD0 00007DE8 00007E00 00007E18 00007E30 00007E48 00007E60 00007E78 00007E90 00007EA8 00007EC0 00007ED8 00007EF0 00007F08 00007F20 00007F38 00007F50 00007F68 00007F80 00007F98 00007FB0 00007FC8 00007FE0 00007FF8 00008010 00008028 00008040 00008058 00008070 00008088 000080A0 000080B8 000080D0 000080E8 00008100 00008118 00008130 00008148 00008160 00008178 00008190 000081A8 000081C0 000081D8 000081F0 00008208 00008220 00008238 00008250 00008268 00008280 00008298 000082B0 000082C8 000082E0 000082F8 00008310 00008328 00008340 00008358 00008370 00008388 000083A0 000083B8 000083D0 000083E8 00008400 00008418 00008430 00008448 00008460 00008478 00008490 000084A8 000084C0 000084D8 000084F0 00008508 00008520 00008538 00008550 00008568 00008580 00008598 000085B0 000085C8 000085E0 000085F8 00008610 00008628 00008640 00008658 00008670 00008688 000086A0 000086B8 000086D0 000086E8 00008700 00008718 00008730 00008748 00008760 00008778 00008790 000087A8 000087C0 000087D8 000087F0 00008808 00008820 00008838 00008850 00008868 00008880 00008898 000088B0 000088C8 000088E0 000088F8 00008910 00008928 00008940 00008958 00008970 00008988 000089A0 000089B8 000089D0 000089E8 00008A00 00008A18 00008A30 00008A48 00008A60 00008A78 00008A90 00008AA8 00008AC0 00008AD8 00008AF0 00008B08 00008B20 00008B38 00008B50 00008B68 00008B80 00008B98 00008BB0 00008BC8 00008BE0 00008BF8 00008C10 00008C28 00008C40 00008C58 00008C70 00008C88 00008CA0 00008CB8 00008CD0 00008CE8 00008D00 00008D18 00008D30 00008D48 00008D60 00008D78 00008D90 00008DA8 00008DC0 00008DD8 00008DF0 00008E08 00008E20 00008E38 00008E50 00008E68 00008E80 00008E98 00008EB0 00008EC8 00008EE0 00008EF8 00008F10 00008F28 00008F40 00008F58 00008F70 00008F88 00008FA0 00008FB8 00008FD0 00008FE8 00009000 00009018 00009030 00009048 00009060 00009078 00009090 000090A8 000090C0 000090D8 000090F0 00009108 00009120 00009138 00009150 00009168 00009180 00009198 000091B0 000091C8 000091E0 000091F8 00009210 00009228 00009240 00009258 00009270 00009288 000092A0 000092B8 000092D0 000092E8 00009300 00009318 00009330 00009348 00009360 00009378 00009390 000093A8 000093C0 000093D8 000093F0 00009408 00009420 00009438 00009450 00009468 00009480 00009498 000094B0 000094C8 000094E0 000094F8 00009510 00009528 00009540 00009558 00009570 00009588 000095A0 000095B8 000095D0 000095E8 00009600 00009618 00009630 00009648 00009660 00009678 00009690 000096A8 000096C0 000096D8 000096F0 00009708 00009720 00009738 00009750 00009768 00009780 00009798 000097B0 000097C8 000097E0 000097F8 00009810 00009828 00009840 00009858 00009870 00009888 000098A0 000098B8 000098D0 000098E8 00009900 00009918 00009930 00009948 00009960 00009978 00009990 000099A8 000099C0 000099D8 000099F0 00009A08 00009A20 00009A38 00009A50 00009A68 00009A80 00009A98 00009AB0 00009AC8 00009AE0 00009AF8 00009B10 00009B28 00009B40 00009B58 00009B70 00009B88 00009BA0 00009BB8 00009BD0 00009BE8 00009C00 00009C18 00009C30 00009C48 00009C60 00009C78 00009C90 00009CA8 00009CC0 00009CD8 00009CF0 00009D08 00009D20 00009D38 00009D50 00009D68 00009D80 00009D98 00009DB0 00009DC8 00009DE0 00009DF8 00009E10 00009E28 00009E40 00009E58 00009E70 00009E88 00009EA0 00009EB8 00009ED0 00009EE8 00009F00 00009F18 00009F30 00009F48 00009F60 00009F78 00009F90 00009FA8 00009FC0 00009FD8 00009FF0 0000A008 0000A020 0000A038 0000A050 0000A068 0000A080 0000A098 0000A0B0 0000A0C8 0000A0E0 0000A0F8 0000A110 0000A128 0000A140 0000A158 0000A170 0000A188 0000A1A0 0000A1B8 0000A1D0 0000A1E8 0000A200 0000A218 0000A230 0000A248 0000A260 0000A278 0000A290 0000A2A8 0000A2C0 0000A2D8 0000A2F0 0000A308 0000A320 0000A338 0000A350 0000A368 0000A380 0000A398 0000A3B0 0000A3C8 0000A3E0 0000A3F8 0000A410 0000A428 0000A440 0000A458 0000A470 0000A488 0000A4A0 0000A4B8 0000A4D0 0000A4E8 0000A500 0000A518 0000A530 0000A548 0000A560 0000A578 0000A590 0000A5A8 0000A5C0 0000A5D8 0000A5F0 0000A608 0000A620 0000A638 0000A650 0000A668 0000A680 0000A698 0000A6B0 0000A6C8 0000A6E0 0000A6F8 0000A710 0000A728 0000A740 0000A758 0000A770 0000A788 0000A7A0 0000A7B8 0000A7D0 0000A7E8 0000A800 0000A818 0000A830 0000A848 0000A860 0000A878 0000A890 0000A8A8 0000A8C0 0000A8D8 0000A8F0 0000A908 0000A920 0000A938 0000A950 0000A968 0000A980 0000A998 0000A9B0 0000A9C8 0000A9E0 0000A9F8 0000AA10 0000AA28 0000AA40 0000AA58 0000AA70 0000AA88 0000AAA0 0000AAB8 0000AAD0 0000AAE8 0000AB00 0000AB18 0000AB30 0000AB48 0000AB60 0000AB78 0000AB90 0000ABA8 0000ABC0 0000ABD8 0000ABF0 0000AC08 0000AC20 0000AC38 0000AC50 0000AC68 0000AC80 0000AC98 0000ACB0 0000ACC8 0000ACE0 0000ACF8 0000AD10 0000AD28 0000AD40 0000AD58 0000AD70 0000AD88 0000ADA0 0000ADB8 0000ADD0 0000ADE8 0000AE00 0000AE18 0000AE30 0000AE48 0000AE60 0000AE78 0000AE90 0000AEA8 0000AEC0 0000AED8 0000AEF0 0000AF08 0000AF20 0000AF38 0000AF50 0000AF68 0000AF80 0000AF98 0000AFB0 0000AFC8 0000AFE0 0000AFF8 0000B010 0000B028 0000B040 0000B058 0000B070 0000B088 0000B0A0 0000B0B8 0000B0D0 0000B0E8 0000B100 0000B118 0000B130 0000B148 0000B160 0000B178 0000B190 0000B1A8 0000B1C0 0000B1D8 0000B1F0 0000B208 0000B220 0000B238 0000B250 0000B268 0000B280 0000B298 0000B2B0 0000B2C8 0000B2E0 0000B2F8 0000B310 0000B328 0000B340 0000B358 0000B370 0000B388 0000B3A0 0000B3B8 0000B3D0 0000B3E8 0000B400 0000B418 0000B430 0000B448 0000B460 0000B478 0000B490 0000B4A8 0000B4C0 0000B4D8 0000B4F0 0000B508 0000B520 0000B538 0000B550 0000B568 0000B580 0000B598 0000B5B0 0000B5C8 0000B5E0 0000B5F8 0000B610 0000B628 0000B640 0000B658 0000B670 0000B688 0000B6A0 0000B6B8 0000B6D0 0000B6E8 0000B700 0000B718 0000B730 0000B748 0000B760 0000B778 0000B790 0000B7A8 0000B7C0 0000B7D8 0000B7F0 0000B808 0000B820 0000B838 0000B850 0000B868 0000B880 0000B898 0000B8B0 0000B8C8 0000B8E0 0000B8F8 0000B910 0000B928 0000B940 0000B958 0000B970 0000B988 0000B9A0 0000B9B8 0000B9D0 0000B9E8 0000BA00 0000BA18 0000BA30 0000BA48 0000BA60 0000BA78 0000BA90 0000BAA8 0000BAC0 0000BAD8 0000BAF0 0000BB08 0000BB20 0000BB38 0000BB50 0000BB68 0000BB80 0000BB98 0000BBB0 0000BBC8 0000BBE0 0000BBF8 0000BC10 0000BC28 0000BC40 0000BC58 0000BC70 0000BC88 0000BCA0 0000BCB8 0000BCD0 0000BCE8 0000BD00 0000BD18 0000BD30 0000BD48 0000BD60 0000BD78 0000BD90 0000BDA8 0000BDC0 0000BDD8 0000BDF0 0000BE08 0000BE20 0000BE38 0000BE50 0000BE68 0000BE80 0000BE98 0000BEB0 0000BEC8 0000BEE0 0000BEF8 0000BF10 0000BF28 0000BF40 0000BF58 0000BF70 0000BF88 0000BFA0 0000BFB8 0000BFD0 0000BFE8 0000C000 0000C018 0000C030 0000C048 0000C060 0000C078 0000C090 0000C0A8 0000C0C0 0000C0D8 0000C0F0 0000C108 0000C120 0000C138 0000C150 0000C168 0000C180 0000C198 0000C1B0 0000C1C8 0000C1E0 0000C1F8 0000C210 0000C228 0000C240 0000C258 0000C270 0000C288 0000C2A0 0000C2B8 0000C2D0 0000C2E8 0000C300 0000C318 0000C330 0000C348 0000C360 0000C378 0000C390 0000C3A8 0000C3C0 0000C3D8 0000C3F0 0000C408 0000C420 0000C438 0000C450 0000C468 0000C480 0000C498 0000C4B0 0000C4C8 0000C4E0 0000C4F8 0000C510 0000C528 0000C540 0000C558 0000C570 0000C588 0000C5A0 0000C5B8 0000C5D0 0000C5E8 0000C600 0000C618 0000C630 0000C648 0000C660 0000C678 0000C690 0000C6A8 0000C6C0 0000C6D8 0000C6F0 0000C708 0000C720 0000C738 0000C750 0000C768 0000C780 0000C798 0000C7B0 0000C7C8 0000C7E0 0000C7F8 0000C810 0000C828 0000C840 0000C858 0000C870 0000C888 0000C8A0 0000C8B8 0000C8D0 0000C8E8 0000C900 0000C918 0000C930 0000C948 0000C960 0000C978 0000C990 0000C9A8 0000C9C0 0000C9D8 0000C9F0 0000CA08 0000CA20 0000CA38 0000CA50 0000CA68 0000CA80 0000CA98 0000CAB0 0000CAC8 0000CAE0 0000CAF8 0000CB10 0000CB28 0000CB40 0000CB58 0000CB70 0000CB88 0000CBA0 0000CBB8 0000CBD0 0000CBE8 0000CC00 0000CC18 0000CC30 0000CC48 0000CC60 0000CC78 0000CC90 0000CCA8 0000CCC0 0000CCD8 0000CCF0 0000CD08 0000CD20 0000CD38 0000CD50 0000CD68 0000CD80 0000CD98 0000CDB0 0000CDC8 0000CDE0 0000CDF8 0000CE10 0000CE28 0000CE40 0000CE58 0000CE70 0000CE88 0000CEA0 0000CEB8 0000CED0 0000CEE8 0000CF00 0000CF18 0000CF30 0000CF48 0000CF60 0000CF78 0000CF90 0000CFA8 0000CFC0 0000CFD8 0000CFF0 0000D008 0000D020 0000D038 0000D050 0000D068 0000D080 0000D098 0000D0B0 0000D0C8 0000D0E0 0000D0F8 0000D110 0000D128 0000D140 0000D158 0000D170 0000D188 0000D1A0 0000D1B8 0000D1D0 0000D1E8 0000D200 0000D218 0000D230 0000D248 0000D260 0000D278 0000D290 0000D2A8 0000D2C0 0000D2D8 0000D2F0 0000D308 0000D320 0000D338 0000D350 0000D368 0000D380 0000D398 0000D3B0 0000D3C8 0000D3E0 0000D3F8 0000D410 0000D428 0000D440 0000D458 0000D470 0000D488 0000D4A0 0000D4B8 0000D4D0 0000D4E8 0000D500 0000D518 0000D530 0000D548 0000D560 0000D578 0000D590 0000D5A8 0000D5C0 0000D5D8 0000D5F0 0000D608 0000D620 0000D638 0000D650 0000D668 0000D680 0000D698 0000D6B0 0000D6C8 0000D6E0 0000D6F8
| 3C 3F 70 68 70 0A 0A 2F 2A 20 76 69 6D 3A 20 73 65 74 20 65 78 70 61 6E 64 74 61 62 20 73 77 3D 34 20 74 73 3D 34 20 73 74 73 3D 34 3A 20 2A 2F 0A 2F 2A 2A 0A 20 2A 20 73 65 74 20 6F 66 20 66 75 6E 63 74 69 6F 6E 73 20 77 69 74 68 20 74 68 65 20 6F 70 65 72 61 74 69 6F 6E 73 20 73 65 63 74 69 6F 6E 20 69 6E 20 70 6D 61 0A 20 2A 0A 20 2A 20 40 70 61 63 6B 61 67 65 20 50 68 70 4D 79 41 64 6D 69 6E 0A 20 2A 2F 0A 0A 69 66 20 28 21 20 64 65 66 69 6E 65 64 28 27 50 48 50 4D 59 41 44 4D 49 4E 27 29 29 20 7B 0A 20 20 20 20 65 78 69 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 6F 75 74 70 75 74 20 66 6F 72 20 64 61 74 61 62 61 73 65 20 63 6F 6D 6D 65 6E 74 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 44 61 74 61 62 61 73 65 43 6F 6D 6D 65 6E 74 28 24 64 62 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 6F 72 6D 20 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 64 62 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 20 69 64 3D 22 66 6F 72 6D 44 61 74 61 62 61 73 65 43 6F 6D 6D 65 6E 74 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 64 62 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 3B 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 49 63 6F 6E 73 28 27 41 63 74 69 6F 6E 4C 69 6E 6B 73 4D 6F 64 65 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6D 67 20 63 6C 61 73 73 3D 22 69 63 6F 6E 20 69 63 5F 62 5F 63 6F 6D 6D 65 6E 74 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 73 72 63 3D 22 74 68 65 6D 65 73 2F 64 6F 74 2E 67 69 66 22 20 61 6C 74 3D 22 22 20 2F 3E 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 20 5F 5F 28 27 44 61 74 61 62 61 73 65 20 63 6F 6D 6D 65 6E 74 3A 27 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 74 65 78 74 22 20 6E 61 6D 65 3D 22 63 6F 6D 6D 65 6E 74 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 63 6C 61 73 73 3D 22 74 65 78 74 66 69 65 6C 64 22 20 73 69 7A 65 3D 22 33 30 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 50 4D 41 5F 67 65 74 44 42 43 6F 6D 6D 65 6E 74 28 24 64 62 29 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 6F 75 74 70 75 74 20 66 6F 72 20 72 65 6E 61 6D 65 20 64 61 74 61 62 61 73 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 52 65 6E 61 6D 65 44 61 74 61 62 61 73 65 28 24 64 62 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 6F 72 6D 20 69 64 3D 22 72 65 6E 61 6D 65 5F 64 62 5F 66 6F 72 6D 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 63 6C 61 73 73 3D 22 61 6A 61 78 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 64 62 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 6F 6E 73 75 62 6D 69 74 3D 22 72 65 74 75 72 6E 20 65 6D 70 74 79 46 6F 72 6D 45 6C 65 6D 65 6E 74 73 28 74 68 69 73 2C 20 5C 27 6E 65 77 6E 61 6D 65 5C 27 29 22 3E 27 3B 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 22 20 2F 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 77 68 61 74 22 20 76 61 6C 75 65 3D 22 64 61 74 61 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 64 62 5F 72 65 6E 61 6D 65 22 20 76 61 6C 75 65 3D 22 74 72 75 65 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 64 62 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 49 63 6F 6E 73 28 27 41 63 74 69 6F 6E 4C 69 6E 6B 73 4D 6F 64 65 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 49 6D 61 67 65 28 27 62 5F 65 64 69 74 2E 70 6E 67 27 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 5F 5F 28 27 52 65 6E 61 6D 65 20 64 61 74 61 62 61 73 65 20 74 6F 3A 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 69 64 3D 22 6E 65 77 5F 64 62 5F 6E 61 6D 65 22 20 74 79 70 65 3D 22 74 65 78 74 22 20 6E 61 6D 65 3D 22 6E 65 77 6E 61 6D 65 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 73 69 7A 65 3D 22 33 30 22 20 63 6C 61 73 73 3D 22 74 65 78 74 66 69 65 6C 64 22 20 76 61 6C 75 65 3D 22 22 20 72 65 71 75 69 72 65 64 3D 22 72 65 71 75 69 72 65 64 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 69 64 3D 22 72 65 6E 61 6D 65 5F 64 62 5F 69 6E 70 75 74 22 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 66 6F 72 20 64 61 74 61 62 61 73 65 20 64 72 6F 70 20 6C 69 6E 6B 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 44 72 6F 70 44 61 74 61 62 61 73 65 4C 69 6E 6B 28 24 64 62 29 0A 7B 0A 20 20 20 20 24 74 68 69 73 5F 73 71 6C 5F 71 75 65 72 79 20 3D 20 27 44 52 4F 50 20 44 41 54 41 42 41 53 45 20 27 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 64 62 29 3B 0A 20 20 20 20 24 74 68 69 73 5F 75 72 6C 5F 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 24 74 68 69 73 5F 73 71 6C 5F 71 75 65 72 79 2C 0A 20 20 20 20 20 20 20 20 27 62 61 63 6B 27 20 3D 3E 20 27 64 62 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 27 2C 0A 20 20 20 20 20 20 20 20 27 67 6F 74 6F 27 20 3D 3E 20 27 69 6E 64 65 78 2E 70 68 70 27 2C 0A 20 20 20 20 20 20 20 20 27 72 65 6C 6F 61 64 27 20 3D 3E 20 27 31 27 2C 0A 20 20 20 20 20 20 20 20 27 70 75 72 67 65 27 20 3D 3E 20 27 31 27 2C 0A 20 20 20 20 20 20 20 20 27 6D 65 73 73 61 67 65 5F 74 6F 5F 73 68 6F 77 27 20 3D 3E 20 73 70 72 69 6E 74 66 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 44 61 74 61 62 61 73 65 20 25 73 20 68 61 73 20 62 65 65 6E 20 64 72 6F 70 70 65 64 2E 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 64 62 29 29 0A 20 20 20 20 20 20 20 20 29 2C 0A 20 20 20 20 20 20 20 20 27 64 62 27 20 3D 3E 20 6E 75 6C 6C 2C 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 63 61 75 74 69 6F 6E 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 65 67 65 6E 64 3E 27 3B 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 49 63 6F 6E 73 28 27 41 63 74 69 6F 6E 4C 69 6E 6B 73 4D 6F 64 65 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 49 6D 61 67 65 28 27 62 5F 64 65 6C 74 62 6C 2E 70 6E 67 27 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 5F 5F 28 27 52 65 6D 6F 76 65 20 64 61 74 61 62 61 73 65 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 75 6C 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 44 65 6C 65 74 65 44 61 74 61 4F 72 54 61 62 6C 65 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 24 74 68 69 73 5F 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 27 44 52 4F 50 5F 44 41 54 41 42 41 53 45 27 2C 0A 20 20 20 20 20 20 20 20 5F 5F 28 27 44 72 6F 70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 44 52 4F 50 29 27 29 2C 0A 20 20 20 20 20 20 20 20 27 64 72 6F 70 5F 64 62 5F 61 6E 63 68 6F 72 27 0A 20 20 20 20 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 75 6C 3E 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 63 6F 70 79 20 64 61 74 61 62 61 73 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 43 6F 70 79 44 61 74 61 62 61 73 65 28 24 64 62 29 0A 7B 0A 20 20 20 20 24 64 72 6F 70 5F 63 6C 61 75 73 65 20 3D 20 27 44 52 4F 50 20 54 41 42 4C 45 20 2F 20 44 52 4F 50 20 56 49 45 57 27 3B 0A 20 20 20 20 24 63 68 6F 69 63 65 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 27 73 74 72 75 63 74 75 72 65 27 20 3D 3E 20 5F 5F 28 27 53 74 72 75 63 74 75 72 65 20 6F 6E 6C 79 27 29 2C 0A 20 20 20 20 20 20 20 20 27 64 61 74 61 27 20 20 20 20 20 20 3D 3E 20 5F 5F 28 27 53 74 72 75 63 74 75 72 65 20 61 6E 64 20 64 61 74 61 27 29 2C 0A 20 20 20 20 20 20 20 20 27 64 61 74 61 6F 6E 6C 79 27 20 20 3D 3E 20 5F 5F 28 27 44 61 74 61 20 6F 6E 6C 79 27 29 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 43 4F 4F 4B 49 45 29 0A 20 20 20 20 20 20 20 20 26 26 20 69 73 73 65 74 28 24 5F 43 4F 4F 4B 49 45 5B 27 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 43 4F 4F 4B 49 45 5B 27 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 27 5D 20 3D 3D 20 27 74 72 75 65 27 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 20 3D 20 27 74 72 75 65 27 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 20 63 6C 65 61 72 66 6C 6F 61 74 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 6F 72 6D 20 69 64 3D 22 63 6F 70 79 5F 64 62 5F 66 6F 72 6D 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 63 6C 61 73 73 3D 22 61 6A 61 78 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 64 62 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 6F 6E 73 75 62 6D 69 74 3D 22 72 65 74 75 72 6E 20 65 6D 70 74 79 46 6F 72 6D 45 6C 65 6D 65 6E 74 73 28 74 68 69 73 2C 20 5C 27 6E 65 77 6E 61 6D 65 5C 27 29 22 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 20 2E 20 27 22 20 2F 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 64 62 5F 63 6F 70 79 22 20 76 61 6C 75 65 3D 22 74 72 75 65 22 20 2F 3E 27 20 2E 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 64 62 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 49 63 6F 6E 73 28 27 41 63 74 69 6F 6E 4C 69 6E 6B 73 4D 6F 64 65 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 49 6D 61 67 65 28 27 62 5F 65 64 69 74 2E 70 6E 67 27 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 5F 5F 28 27 43 6F 70 79 20 64 61 74 61 62 61 73 65 20 74 6F 3A 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 74 65 78 74 22 20 6E 61 6D 65 3D 22 6E 65 77 6E 61 6D 65 22 20 73 69 7A 65 3D 22 33 30 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 63 6C 61 73 73 3D 22 74 65 78 74 66 69 65 6C 64 22 20 76 61 6C 75 65 3D 22 22 20 72 65 71 75 69 72 65 64 3D 22 72 65 71 75 69 72 65 64 22 20 2F 3E 3C 62 72 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 52 61 64 69 6F 46 69 65 6C 64 73 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 77 68 61 74 27 2C 20 24 63 68 6F 69 63 65 73 2C 20 27 64 61 74 61 27 2C 20 74 72 75 65 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 63 72 65 61 74 65 5F 64 61 74 61 62 61 73 65 5F 62 65 66 6F 72 65 5F 63 6F 70 79 69 6E 67 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 31 22 20 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 63 72 65 61 74 65 5F 64 61 74 61 62 61 73 65 5F 62 65 66 6F 72 65 5F 63 6F 70 79 69 6E 67 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 63 72 65 61 74 65 5F 64 61 74 61 62 61 73 65 5F 62 65 66 6F 72 65 5F 63 6F 70 79 69 6E 67 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 43 52 45 41 54 45 20 44 41 54 41 42 41 53 45 20 62 65 66 6F 72 65 20 63 6F 70 79 69 6E 67 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 22 20 76 61 6C 75 65 3D 22 74 72 75 65 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 64 72 6F 70 22 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 64 72 6F 70 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 73 70 72 69 6E 74 66 28 5F 5F 28 27 41 64 64 20 25 73 27 29 2C 20 24 64 72 6F 70 5F 63 6C 61 75 73 65 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 73 71 6C 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 22 20 76 61 6C 75 65 3D 22 31 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 20 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 22 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 41 64 64 20 41 55 54 4F 5F 49 4E 43 52 45 4D 45 4E 54 20 76 61 6C 75 65 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 61 64 64 5F 63 6F 6E 73 74 72 61 69 6E 74 73 22 20 76 61 6C 75 65 3D 22 31 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 63 6F 6E 73 74 72 61 69 6E 74 73 22 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 63 6F 6E 73 74 72 61 69 6E 74 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 41 64 64 20 63 6F 6E 73 74 72 61 69 6E 74 73 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 22 20 76 61 6C 75 65 3D 22 74 72 75 65 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 73 77 69 74 63 68 22 27 0A 20 20 20 20 20 20 20 20 2E 20 28 28 69 73 73 65 74 28 24 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 29 20 26 26 20 24 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 20 3D 3D 20 27 74 72 75 65 27 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 3F 20 27 20 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 27 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 2F 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 73 77 69 74 63 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 53 77 69 74 63 68 20 74 6F 20 63 6F 70 69 65 64 20 64 61 74 61 62 61 73 65 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 5F 63 6F 70 79 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 63 68 61 6E 67 65 20 64 61 74 61 62 61 73 65 20 63 68 61 72 73 65 74 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 20 20 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 74 61 62 6C 65 20 74 61 62 65 6C 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 43 68 61 6E 67 65 44 61 74 61 62 61 73 65 43 68 61 72 73 65 74 28 24 64 62 2C 20 24 74 61 62 6C 65 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 6F 72 6D 20 69 64 3D 22 63 68 61 6E 67 65 5F 64 62 5F 63 68 61 72 73 65 74 5F 66 6F 72 6D 22 20 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 63 6C 61 73 73 3D 22 61 6A 61 78 22 20 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 64 62 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 64 62 2C 20 24 74 61 62 6C 65 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 20 2E 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 2E 20 27 20 20 20 20 3C 6C 65 67 65 6E 64 3E 27 3B 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 49 63 6F 6E 73 28 27 41 63 74 69 6F 6E 4C 69 6E 6B 73 4D 6F 64 65 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 49 6D 61 67 65 28 27 73 5F 61 73 63 69 2E 70 6E 67 27 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 73 65 6C 65 63 74 5F 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 22 3E 27 20 2E 20 5F 5F 28 27 43 6F 6C 6C 61 74 69 6F 6E 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3A 3C 2F 6C 61 62 65 6C 3E 27 20 2E 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 20 2E 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 67 65 6E 65 72 61 74 65 43 68 61 72 73 65 74 44 72 6F 70 64 6F 77 6E 42 6F 78 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 50 4D 41 5F 43 53 44 52 4F 50 44 4F 57 4E 5F 43 4F 4C 4C 41 54 49 4F 4E 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 73 65 6C 65 63 74 5F 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 20 3F 20 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 20 3A 20 27 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6C 73 65 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 33 0A 20 20 20 20 20 20 20 20 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 63 6F 6C 6C 61 74 69 6F 6E 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 20 2E 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 20 2E 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 3C 2F 64 69 76 3E 27 20 2E 20 22 5C 6E 22 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 65 78 70 6F 72 74 20 72 65 6C 61 74 69 6F 6E 61 6C 20 73 63 68 65 6D 61 20 76 69 65 77 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 75 72 6C 5F 71 75 65 72 79 20 51 75 65 72 79 20 73 74 72 69 6E 67 20 66 6F 72 20 6C 69 6E 6B 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 45 78 70 6F 72 74 52 65 6C 61 74 69 6F 6E 61 6C 53 63 68 65 6D 61 56 69 65 77 28 24 75 72 6C 5F 71 75 65 72 79 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 66 75 6C 6C 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 3E 3C 61 20 68 72 65 66 3D 22 73 63 68 65 6D 61 5F 65 64 69 74 2E 70 68 70 3F 27 20 2E 20 24 75 72 6C 5F 71 75 65 72 79 20 2E 20 27 22 3E 27 3B 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 49 63 6F 6E 73 28 27 41 63 74 69 6F 6E 4C 69 6E 6B 73 4D 6F 64 65 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 49 6D 61 67 65 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 62 5F 65 64 69 74 2E 70 6E 67 27 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 5F 5F 28 27 45 64 69 74 20 6F 72 20 65 78 70 6F 72 74 20 72 65 6C 61 74 69 6F 6E 61 6C 20 73 63 68 65 6D 61 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 61 3E 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 52 75 6E 20 74 68 65 20 50 72 6F 63 65 64 75 72 65 20 64 65 66 69 6E 69 74 69 6F 6E 73 20 61 6E 64 20 66 75 6E 63 74 69 6F 6E 20 64 65 66 69 6E 69 74 69 6F 6E 73 0A 20 2A 0A 20 2A 20 74 6F 20 61 76 6F 69 64 20 73 65 6C 65 63 74 69 6E 67 20 61 6C 74 65 72 6E 61 74 69 76 65 6C 79 20 74 68 65 20 63 75 72 72 65 6E 74 20 61 6E 64 20 6E 65 77 20 64 62 0A 20 2A 20 77 65 20 77 6F 75 6C 64 20 6E 65 65 64 20 74 6F 20 6D 6F 64 69 66 79 20 74 68 65 20 43 52 45 41 54 45 20 64 65 66 69 6E 69 74 69 6F 6E 73 20 74 6F 20 71 75 61 6C 69 66 79 0A 20 2A 20 74 68 65 20 64 62 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 76 6F 69 64 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 72 75 6E 50 72 6F 63 65 64 75 72 65 41 6E 64 46 75 6E 63 74 69 6F 6E 44 65 66 69 6E 69 74 69 6F 6E 73 28 24 64 62 29 0A 7B 0A 20 20 20 20 24 70 72 6F 63 65 64 75 72 65 5F 6E 61 6D 65 73 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 50 72 6F 63 65 64 75 72 65 73 4F 72 46 75 6E 63 74 69 6F 6E 73 28 24 64 62 2C 20 27 50 52 4F 43 45 44 55 52 45 27 29 3B 0A 20 20 20 20 69 66 20 28 24 70 72 6F 63 65 64 75 72 65 5F 6E 61 6D 65 73 29 20 7B 0A 20 20 20 20 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 70 72 6F 63 65 64 75 72 65 5F 6E 61 6D 65 73 20 61 73 20 24 70 72 6F 63 65 64 75 72 65 5F 6E 61 6D 65 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 64 62 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 74 6D 70 5F 71 75 65 72 79 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 44 65 66 69 6E 69 74 69 6F 6E 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 2C 20 27 50 52 4F 43 45 44 55 52 45 27 2C 20 24 70 72 6F 63 65 64 75 72 65 5F 6E 61 6D 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 63 6F 6C 6C 65 63 74 20 66 6F 72 20 6C 61 74 65 72 20 64 69 73 70 6C 61 79 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 71 75 65 72 79 27 5D 20 2E 3D 20 22 5C 6E 22 20 2E 20 24 74 6D 70 5F 71 75 65 72 79 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 74 6D 70 5F 71 75 65 72 79 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 66 75 6E 63 74 69 6F 6E 5F 6E 61 6D 65 73 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 50 72 6F 63 65 64 75 72 65 73 4F 72 46 75 6E 63 74 69 6F 6E 73 28 24 64 62 2C 20 27 46 55 4E 43 54 49 4F 4E 27 29 3B 0A 20 20 20 20 69 66 20 28 24 66 75 6E 63 74 69 6F 6E 5F 6E 61 6D 65 73 29 20 7B 0A 20 20 20 20 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 66 75 6E 63 74 69 6F 6E 5F 6E 61 6D 65 73 20 61 73 20 24 66 75 6E 63 74 69 6F 6E 5F 6E 61 6D 65 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 64 62 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 74 6D 70 5F 71 75 65 72 79 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 44 65 66 69 6E 69 74 69 6F 6E 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 2C 20 27 46 55 4E 43 54 49 4F 4E 27 2C 20 24 66 75 6E 63 74 69 6F 6E 5F 6E 61 6D 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 63 6F 6C 6C 65 63 74 20 66 6F 72 20 6C 61 74 65 72 20 64 69 73 70 6C 61 79 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 71 75 65 72 79 27 5D 20 2E 3D 20 22 5C 6E 22 20 2E 20 24 74 6D 70 5F 71 75 65 72 79 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 74 6D 70 5F 71 75 65 72 79 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 73 71 6C 20 71 75 65 72 79 20 61 6E 64 20 63 72 65 61 74 65 20 64 61 74 61 62 61 73 65 20 62 65 66 6F 72 65 20 63 6F 70 79 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 73 71 6C 5F 71 75 65 72 79 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 53 71 6C 51 75 65 72 79 41 6E 64 43 72 65 61 74 65 44 62 42 65 66 6F 72 65 43 6F 70 79 28 29 0A 7B 0A 20 20 20 20 2F 2F 20 6C 6F 77 65 72 5F 63 61 73 65 5F 74 61 62 6C 65 5F 6E 61 6D 65 73 3D 31 20 60 44 42 60 20 62 65 63 6F 6D 65 73 20 60 64 62 60 0A 20 20 20 20 69 66 20 28 21 20 50 4D 41 5F 44 52 49 5A 5A 4C 45 29 20 7B 0A 20 20 20 20 20 20 20 20 24 6C 6F 77 65 72 43 61 73 65 54 61 62 6C 65 4E 61 6D 65 73 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 66 65 74 63 68 56 61 6C 75 65 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 53 48 4F 57 20 56 41 52 49 41 42 4C 45 53 20 4C 49 4B 45 20 22 6C 6F 77 65 72 5F 63 61 73 65 5F 74 61 62 6C 65 5F 6E 61 6D 65 73 22 27 2C 20 30 2C 20 31 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 6C 6F 77 65 72 43 61 73 65 54 61 62 6C 65 4E 61 6D 65 73 20 3D 3D 3D 20 27 31 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 50 4D 41 5F 53 74 72 69 6E 67 27 5D 2D 3E 73 74 72 74 6F 6C 6F 77 65 72 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 6C 6F 63 61 6C 5F 71 75 65 72 79 20 3D 20 27 43 52 45 41 54 45 20 44 41 54 41 42 41 53 45 20 49 46 20 4E 4F 54 20 45 58 49 53 54 53 20 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 6C 6F 63 61 6C 5F 71 75 65 72 79 20 2E 3D 20 27 20 44 45 46 41 55 4C 54 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 67 65 6E 65 72 61 74 65 43 68 61 72 73 65 74 51 75 65 72 79 50 61 72 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 62 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 6C 6F 63 61 6C 5F 71 75 65 72 79 20 2E 3D 20 27 3B 27 3B 0A 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 3D 20 24 6C 6F 63 61 6C 5F 71 75 65 72 79 3B 0A 20 20 20 20 2F 2F 20 73 61 76 65 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 64 62 20 6E 61 6D 65 20 62 65 63 61 75 73 65 20 54 72 61 63 6B 65 72 2E 63 6C 61 73 73 2E 70 68 70 20 77 68 69 63 68 0A 20 20 20 20 2F 2F 20 6D 61 79 20 62 65 20 63 61 6C 6C 65 64 20 75 6E 64 65 72 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 29 20 63 68 61 6E 67 65 73 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 0A 20 20 20 20 2F 2F 20 66 6F 72 20 73 6F 6D 65 20 73 74 61 74 65 6D 65 6E 74 73 2C 20 6F 6E 65 20 6F 66 20 77 68 69 63 68 20 62 65 69 6E 67 20 43 52 45 41 54 45 20 44 41 54 41 42 41 53 45 0A 20 20 20 20 24 6F 72 69 67 69 6E 61 6C 5F 64 62 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 3B 0A 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 6C 6F 63 61 6C 5F 71 75 65 72 79 29 3B 0A 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 20 3D 20 24 6F 72 69 67 69 6E 61 6C 5F 64 62 3B 0A 0A 20 20 20 20 2F 2F 20 53 65 74 20 74 68 65 20 53 51 4C 20 6D 6F 64 65 20 74 6F 20 4E 4F 5F 41 55 54 4F 5F 56 41 4C 55 45 5F 4F 4E 5F 5A 45 52 4F 20 74 6F 20 70 72 65 76 65 6E 74 20 4D 79 53 51 4C 20 66 72 6F 6D 20 63 72 65 61 74 69 6E 67 0A 20 20 20 20 2F 2F 20 65 78 70 6F 72 74 20 73 74 61 74 65 6D 65 6E 74 73 20 69 74 20 63 61 6E 6E 6F 74 20 69 6D 70 6F 72 74 0A 20 20 20 20 24 73 71 6C 5F 73 65 74 5F 6D 6F 64 65 20 3D 20 22 53 45 54 20 53 51 4C 5F 4D 4F 44 45 3D 27 4E 4F 5F 41 55 54 4F 5F 56 41 4C 55 45 5F 4F 4E 5F 5A 45 52 4F 27 22 3B 0A 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 73 71 6C 5F 73 65 74 5F 6D 6F 64 65 29 3B 0A 0A 20 20 20 20 2F 2F 20 72 65 62 75 69 6C 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6C 69 73 74 20 62 65 63 61 75 73 65 20 50 4D 41 5F 54 61 62 6C 65 3A 3A 6D 6F 76 65 43 6F 70 79 0A 20 20 20 20 2F 2F 20 63 68 65 63 6B 73 20 69 6E 20 74 68 69 73 20 6C 69 73 74 20 69 66 20 74 68 65 20 74 61 72 67 65 74 20 64 62 20 65 78 69 73 74 73 0A 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 70 6D 61 27 5D 2D 3E 64 61 74 61 62 61 73 65 73 2D 3E 62 75 69 6C 64 28 29 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 73 71 6C 5F 71 75 65 72 79 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 72 65 6D 6F 76 65 20 61 6C 6C 20 66 6F 72 65 69 67 6E 20 6B 65 79 20 63 6F 6E 73 74 72 61 69 6E 74 73 20 61 6E 64 20 72 65 74 75 72 6E 0A 20 2A 20 73 71 6C 20 63 6F 6E 73 74 72 61 69 6E 74 73 20 71 75 65 72 79 20 66 6F 72 20 66 75 6C 6C 20 64 61 74 61 62 61 73 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 20 20 24 74 61 62 6C 65 73 5F 66 75 6C 6C 20 20 20 20 20 20 20 61 72 72 61 79 20 6F 66 20 61 6C 6C 20 74 61 62 6C 65 73 20 69 6E 20 67 69 76 65 6E 20 64 62 20 6F 72 20 64 62 73 0A 20 2A 20 40 70 61 72 61 6D 20 45 78 70 6F 72 74 53 71 6C 20 24 65 78 70 6F 72 74 5F 73 71 6C 5F 70 6C 75 67 69 6E 20 65 78 70 6F 72 74 20 70 6C 75 67 69 6E 20 69 6E 73 74 61 6E 63 65 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 20 20 24 6D 6F 76 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 20 20 24 64 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 73 71 6C 20 63 6F 6E 73 74 72 61 69 6E 74 73 20 71 75 65 72 79 20 66 6F 72 20 66 75 6C 6C 20 64 61 74 61 62 61 73 65 73 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 53 71 6C 43 6F 6E 73 74 72 61 69 6E 74 73 51 75 65 72 79 46 6F 72 46 75 6C 6C 44 62 28 0A 20 20 20 20 24 74 61 62 6C 65 73 5F 66 75 6C 6C 2C 20 24 65 78 70 6F 72 74 5F 73 71 6C 5F 70 6C 75 67 69 6E 2C 20 24 6D 6F 76 65 2C 20 24 64 62 0A 29 20 7B 0A 20 20 20 20 67 6C 6F 62 61 6C 20 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 2C 20 24 73 71 6C 5F 64 72 6F 70 5F 66 6F 72 65 69 67 6E 5F 6B 65 79 73 3B 0A 20 20 20 20 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 5F 66 75 6C 6C 5F 64 62 20 3D 20 61 72 72 61 79 28 29 3B 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 74 61 62 6C 65 73 5F 66 75 6C 6C 20 61 73 20 24 65 61 63 68 5F 74 61 62 6C 65 20 3D 3E 20 24 74 6D 70 29 20 7B 0A 20 20 20 20 20 20 20 20 2F 2A 20 46 6F 6C 6C 6F 77 69 6E 67 20 67 6C 6F 62 61 6C 73 20 61 72 65 20 73 65 74 20 69 6E 20 67 65 74 54 61 62 6C 65 44 65 66 20 2A 2F 0A 20 20 20 20 20 20 20 20 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 20 3D 20 27 27 3B 0A 20 20 20 20 20 20 20 20 24 73 71 6C 5F 64 72 6F 70 5F 66 6F 72 65 69 67 6E 5F 6B 65 79 73 20 3D 20 27 27 3B 0A 20 20 20 20 20 20 20 20 24 65 78 70 6F 72 74 5F 73 71 6C 5F 70 6C 75 67 69 6E 2D 3E 67 65 74 54 61 62 6C 65 44 65 66 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 2C 20 22 5C 6E 22 2C 20 27 27 2C 20 66 61 6C 73 65 2C 20 66 61 6C 73 65 2C 20 66 61 6C 73 65 2C 20 66 61 6C 73 65 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 6D 6F 76 65 20 26 26 20 21 20 65 6D 70 74 79 28 24 73 71 6C 5F 64 72 6F 70 5F 66 6F 72 65 69 67 6E 5F 6B 65 79 73 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 73 71 6C 5F 64 72 6F 70 5F 66 6F 72 65 69 67 6E 5F 6B 65 79 73 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 2F 2F 20 6B 65 65 70 20 74 68 65 20 63 6F 6E 73 74 72 61 69 6E 74 20 77 65 20 6A 75 73 74 20 64 72 6F 70 70 65 64 0A 20 20 20 20 20 20 20 20 69 66 20 28 21 20 65 6D 70 74 79 28 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 5F 66 75 6C 6C 5F 64 62 5B 5D 20 3D 20 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 20 20 20 20 72 65 74 75 72 6E 20 24 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 5F 66 75 6C 6C 5F 64 62 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 76 69 65 77 73 20 61 73 20 61 6E 20 61 72 72 61 79 20 61 6E 64 20 63 72 65 61 74 65 20 53 51 4C 20 76 69 65 77 20 73 74 61 6E 64 2D 69 6E 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 20 20 24 74 61 62 6C 65 73 5F 66 75 6C 6C 20 20 20 20 20 20 20 61 72 72 61 79 20 6F 66 20 61 6C 6C 20 74 61 62 6C 65 73 20 69 6E 20 67 69 76 65 6E 20 64 62 20 6F 72 20 64 62 73 0A 20 2A 20 40 70 61 72 61 6D 20 45 78 70 6F 72 74 53 71 6C 20 24 65 78 70 6F 72 74 5F 73 71 6C 5F 70 6C 75 67 69 6E 20 65 78 70 6F 72 74 20 70 6C 75 67 69 6E 20 69 6E 73 74 61 6E 63 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 20 20 24 64 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 24 76 69 65 77 73 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 56 69 65 77 73 41 6E 64 43 72 65 61 74 65 53 71 6C 56 69 65 77 53 74 61 6E 64 49 6E 28 0A 20 20 20 20 24 74 61 62 6C 65 73 5F 66 75 6C 6C 2C 20 24 65 78 70 6F 72 74 5F 73 71 6C 5F 70 6C 75 67 69 6E 2C 20 24 64 62 0A 29 20 7B 0A 20 20 20 20 24 76 69 65 77 73 20 3D 20 61 72 72 61 79 28 29 3B 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 74 61 62 6C 65 73 5F 66 75 6C 6C 20 61 73 20 24 65 61 63 68 5F 74 61 62 6C 65 20 3D 3E 20 24 74 6D 70 29 20 7B 0A 20 20 20 20 20 20 20 20 2F 2F 20 74 6F 20 62 65 20 61 62 6C 65 20 74 6F 20 72 65 6E 61 6D 65 20 61 20 64 62 20 63 6F 6E 74 61 69 6E 69 6E 67 20 76 69 65 77 73 2C 0A 20 20 20 20 20 20 20 20 2F 2F 20 66 69 72 73 74 20 61 6C 6C 20 74 68 65 20 76 69 65 77 73 20 61 72 65 20 63 6F 6C 6C 65 63 74 65 64 20 61 6E 64 20 61 20 73 74 61 6E 64 2D 69 6E 20 69 73 20 63 72 65 61 74 65 64 0A 20 20 20 20 20 20 20 20 2F 2F 20 74 68 65 20 72 65 61 6C 20 76 69 65 77 73 20 61 72 65 20 63 72 65 61 74 65 64 20 61 66 74 65 72 20 74 68 65 20 74 61 62 6C 65 73 0A 20 20 20 20 20 20 20 20 69 66 20 28 50 4D 41 5F 54 61 62 6C 65 3A 3A 69 73 56 69 65 77 28 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 76 69 65 77 73 5B 5D 20 3D 20 24 65 61 63 68 5F 74 61 62 6C 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 43 72 65 61 74 65 20 73 74 61 6E 64 2D 69 6E 20 64 65 66 69 6E 69 74 69 6F 6E 20 74 6F 20 72 65 73 6F 6C 76 65 20 76 69 65 77 20 64 65 70 65 6E 64 65 6E 63 69 65 73 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 73 71 6C 5F 76 69 65 77 5F 73 74 61 6E 64 69 6E 20 3D 20 24 65 78 70 6F 72 74 5F 73 71 6C 5F 70 6C 75 67 69 6E 2D 3E 67 65 74 54 61 62 6C 65 44 65 66 53 74 61 6E 64 49 6E 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 2C 20 22 5C 6E 22 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 73 71 6C 5F 76 69 65 77 5F 73 74 61 6E 64 69 6E 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 71 75 65 72 79 27 5D 20 2E 3D 20 22 5C 6E 22 20 2E 20 24 73 71 6C 5F 76 69 65 77 5F 73 74 61 6E 64 69 6E 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 20 20 20 20 72 65 74 75 72 6E 20 24 76 69 65 77 73 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 73 71 6C 20 71 75 65 72 79 20 66 6F 72 20 63 6F 70 79 2F 72 65 6E 61 6D 65 20 74 61 62 6C 65 20 61 6E 64 20 62 6F 6F 6C 65 61 6E 20 66 6F 72 20 77 68 65 74 68 65 72 20 63 6F 70 79 2F 72 65 6E 61 6D 65 20 6F 72 20 6E 6F 74 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 74 61 62 6C 65 73 5F 66 75 6C 6C 20 61 72 72 61 79 20 6F 66 20 61 6C 6C 20 74 61 62 6C 65 73 20 69 6E 20 67 69 76 65 6E 20 64 62 20 6F 72 20 64 62 73 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 73 71 6C 5F 71 75 65 72 79 20 20 20 73 71 6C 20 71 75 65 72 79 20 66 6F 72 20 61 6C 6C 20 6F 70 65 72 61 74 69 6F 6E 73 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 6D 6F 76 65 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 64 62 20 20 20 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 28 24 73 71 6C 5F 71 75 65 72 79 2C 20 24 65 72 72 6F 72 29 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 53 71 6C 51 75 65 72 79 46 6F 72 43 6F 70 79 54 61 62 6C 65 28 24 74 61 62 6C 65 73 5F 66 75 6C 6C 2C 20 24 73 71 6C 5F 71 75 65 72 79 2C 20 24 6D 6F 76 65 2C 20 24 64 62 29 0A 7B 0A 20 20 20 20 24 65 72 72 6F 72 20 3D 20 66 61 6C 73 65 3B 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 74 61 62 6C 65 73 5F 66 75 6C 6C 20 61 73 20 24 65 61 63 68 5F 74 61 62 6C 65 20 3D 3E 20 24 74 6D 70 29 20 7B 0A 20 20 20 20 20 20 20 20 2F 2F 20 73 6B 69 70 20 74 68 65 20 76 69 65 77 73 3B 20 77 65 20 68 61 76 65 20 63 72 65 74 65 64 20 73 74 61 6E 64 2D 69 6E 20 64 65 66 69 6E 69 74 69 6F 6E 73 0A 20 20 20 20 20 20 20 20 69 66 20 28 50 4D 41 5F 54 61 62 6C 65 3A 3A 69 73 56 69 65 77 28 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 24 62 61 63 6B 20 3D 20 24 73 71 6C 5F 71 75 65 72 79 3B 0A 20 20 20 20 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 3D 20 27 27 3B 0A 0A 20 20 20 20 20 20 20 20 2F 2F 20 76 61 6C 75 65 20 6F 66 20 24 77 68 61 74 20 66 6F 72 20 74 68 69 73 20 74 61 62 6C 65 20 6F 6E 6C 79 0A 20 20 20 20 20 20 20 20 24 74 68 69 73 5F 77 68 61 74 20 3D 20 24 5F 52 45 51 55 45 53 54 5B 27 77 68 61 74 27 5D 3B 0A 0A 20 20 20 20 20 20 20 20 2F 2F 20 64 6F 20 6E 6F 74 20 63 6F 70 79 20 74 68 65 20 64 61 74 61 20 66 72 6F 6D 20 61 20 4D 65 72 67 65 20 74 61 62 6C 65 0A 20 20 20 20 20 20 20 20 2F 2F 20 6E 6F 74 65 3A 20 6F 6E 20 74 68 65 20 63 61 6C 6C 69 6E 67 20 46 4F 52 4D 2C 20 27 64 61 74 61 27 20 6D 65 61 6E 73 20 27 73 74 72 75 63 74 75 72 65 20 61 6E 64 20 64 61 74 61 27 0A 20 20 20 20 20 20 20 20 69 66 20 28 50 4D 41 5F 54 61 62 6C 65 3A 3A 69 73 4D 65 72 67 65 28 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 5F 77 68 61 74 20 3D 3D 20 27 64 61 74 61 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 5F 77 68 61 74 20 3D 20 27 73 74 72 75 63 74 75 72 65 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 5F 77 68 61 74 20 3D 3D 20 27 64 61 74 61 6F 6E 6C 79 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 5F 77 68 61 74 20 3D 20 27 6E 6F 63 6F 70 79 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 7D 0A 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 5F 77 68 61 74 20 21 3D 20 27 6E 6F 63 6F 70 79 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 6B 65 65 70 20 74 68 65 20 74 72 69 67 67 65 72 73 20 66 72 6F 6D 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 64 62 2B 74 61 62 6C 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 28 74 68 69 72 64 20 70 61 72 61 6D 20 69 73 20 65 6D 70 74 79 20 62 65 63 61 75 73 65 20 64 65 6C 69 6D 69 74 65 72 73 20 61 72 65 20 6F 6E 6C 79 20 69 6E 74 65 6E 64 65 64 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 20 66 6F 72 20 69 6D 70 6F 72 74 69 6E 67 20 76 69 61 20 74 68 65 20 6D 79 73 71 6C 20 63 6C 69 65 6E 74 20 6F 72 20 6F 75 72 20 49 6D 70 6F 72 74 20 66 65 61 74 75 72 65 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 69 67 67 65 72 73 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 54 72 69 67 67 65 72 73 28 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 2C 20 27 27 29 3B 0A 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 20 50 4D 41 5F 54 61 62 6C 65 3A 3A 6D 6F 76 65 43 6F 70 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 2C 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 2C 20 24 65 61 63 68 5F 74 61 62 6C 65 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 73 73 65 74 28 24 74 68 69 73 5F 77 68 61 74 29 20 3F 20 24 74 68 69 73 5F 77 68 61 74 20 3A 20 27 64 61 74 61 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6D 6F 76 65 2C 20 27 64 62 5F 63 6F 70 79 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6F 72 20 3D 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 24 73 71 6C 5F 71 75 65 72 79 20 69 73 20 66 69 6C 6C 65 64 20 62 79 20 50 4D 41 5F 54 61 62 6C 65 3A 3A 6D 6F 76 65 43 6F 70 79 28 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 3D 20 24 62 61 63 6B 20 2E 20 24 73 71 6C 5F 71 75 65 72 79 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6B 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 61 70 70 6C 79 20 74 68 65 20 74 72 69 67 67 65 72 73 20 74 6F 20 74 68 65 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 64 62 2B 74 61 62 6C 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 72 69 67 67 65 72 73 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 74 72 69 67 67 65 72 73 20 61 73 20 24 74 72 69 67 67 65 72 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 74 72 69 67 67 65 72 5B 27 63 72 65 61 74 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 71 75 65 72 79 27 5D 20 2E 3D 20 22 5C 6E 22 20 2E 20 24 74 72 69 67 67 65 72 5B 27 63 72 65 61 74 65 27 5D 20 2E 20 27 3B 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 20 20 20 20 7D 0A 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 74 68 69 73 20 64 6F 65 73 20 6E 6F 74 20 61 70 70 6C 79 20 74 6F 20 61 20 72 65 6E 61 6D 65 20 6F 70 65 72 61 74 69 6F 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 61 64 64 5F 63 6F 6E 73 74 72 61 69 6E 74 73 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 21 20 65 6D 70 74 79 28 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 5F 66 75 6C 6C 5F 64 62 27 5D 5B 5D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 27 5D 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6E 73 65 74 28 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 2F 2F 20 24 73 71 6C 5F 71 75 65 72 79 20 69 73 20 66 69 6C 6C 65 64 20 62 79 20 50 4D 41 5F 54 61 62 6C 65 3A 3A 6D 6F 76 65 43 6F 70 79 28 29 0A 20 20 20 20 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 3D 20 24 62 61 63 6B 20 2E 20 24 73 71 6C 5F 71 75 65 72 79 3B 0A 20 20 20 20 7D 0A 20 20 20 20 72 65 74 75 72 6E 20 61 72 72 61 79 28 24 73 71 6C 5F 71 75 65 72 79 2C 20 24 65 72 72 6F 72 29 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 52 75 6E 20 74 68 65 20 45 56 45 4E 54 20 64 65 66 69 6E 69 74 69 6F 6E 20 66 6F 72 20 73 65 6C 65 63 74 65 64 20 64 61 74 61 62 61 73 65 0A 20 2A 0A 20 2A 20 74 6F 20 61 76 6F 69 64 20 73 65 6C 65 63 74 69 6E 67 20 61 6C 74 65 72 6E 61 74 69 76 65 6C 79 20 74 68 65 20 63 75 72 72 65 6E 74 20 61 6E 64 20 6E 65 77 20 64 62 0A 20 2A 20 77 65 20 77 6F 75 6C 64 20 6E 65 65 64 20 74 6F 20 6D 6F 64 69 66 79 20 74 68 65 20 43 52 45 41 54 45 20 64 65 66 69 6E 69 74 69 6F 6E 73 20 74 6F 20 71 75 61 6C 69 66 79 0A 20 2A 20 74 68 65 20 64 62 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 64 62 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 76 6F 69 64 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 72 75 6E 45 76 65 6E 74 44 65 66 69 6E 69 74 69 6F 6E 73 46 6F 72 44 62 28 24 64 62 29 0A 7B 0A 20 20 20 20 24 65 76 65 6E 74 5F 6E 61 6D 65 73 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 66 65 74 63 68 52 65 73 75 6C 74 28 0A 20 20 20 20 20 20 20 20 27 53 45 4C 45 43 54 20 45 56 45 4E 54 5F 4E 41 4D 45 20 46 52 4F 4D 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 5F 73 63 68 65 6D 61 2E 45 56 45 4E 54 53 20 57 48 45 52 45 20 45 56 45 4E 54 5F 53 43 48 45 4D 41 3D 20 5C 27 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 71 6C 41 64 64 53 6C 61 73 68 65 73 28 24 64 62 2C 20 74 72 75 65 29 20 2E 20 27 5C 27 3B 27 0A 20 20 20 20 29 3B 0A 20 20 20 20 69 66 20 28 24 65 76 65 6E 74 5F 6E 61 6D 65 73 29 20 7B 0A 20 20 20 20 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 65 76 65 6E 74 5F 6E 61 6D 65 73 20 61 73 20 24 65 76 65 6E 74 5F 6E 61 6D 65 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 64 62 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 74 6D 70 5F 71 75 65 72 79 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 44 65 66 69 6E 69 74 69 6F 6E 28 24 64 62 2C 20 27 45 56 45 4E 54 27 2C 20 24 65 76 65 6E 74 5F 6E 61 6D 65 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 2F 20 63 6F 6C 6C 65 63 74 20 66 6F 72 20 6C 61 74 65 72 20 64 69 73 70 6C 61 79 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 71 75 65 72 79 27 5D 20 2E 3D 20 22 5C 6E 22 20 2E 20 24 74 6D 70 5F 71 75 65 72 79 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 74 6D 70 5F 71 75 65 72 79 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 48 61 6E 64 6C 65 20 74 68 65 20 76 69 65 77 73 2C 20 72 65 74 75 72 6E 20 74 68 65 20 62 6F 6F 6C 65 61 6E 20 76 61 6C 75 65 20 77 68 65 74 68 65 72 20 74 61 62 6C 65 20 72 65 6E 61 6D 65 2F 63 6F 70 79 20 6F 72 20 6E 6F 74 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 76 69 65 77 73 20 76 69 65 77 73 20 61 73 20 61 6E 20 61 72 72 61 79 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 6D 6F 76 65 20 20 77 68 65 74 68 65 72 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 64 62 20 20 20 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 62 6F 6F 6C 65 61 6E 20 24 5F 65 72 72 6F 72 20 77 68 65 74 68 65 72 20 74 61 62 6C 65 20 72 65 6E 61 6D 65 2F 63 6F 70 79 20 6F 72 20 6E 6F 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 68 61 6E 64 6C 65 54 68 65 56 69 65 77 73 28 24 76 69 65 77 73 2C 20 24 6D 6F 76 65 2C 20 24 64 62 29 0A 7B 0A 20 20 20 20 24 5F 65 72 72 6F 72 20 3D 20 66 61 6C 73 65 3B 0A 20 20 20 20 2F 2F 20 74 65 6D 70 6F 72 61 72 69 6C 79 20 66 6F 72 63 65 20 74 6F 20 61 64 64 20 44 52 4F 50 20 49 46 20 45 58 49 53 54 20 74 6F 20 43 52 45 41 54 45 20 56 49 45 57 20 71 75 65 72 79 2C 0A 20 20 20 20 2F 2F 20 74 6F 20 72 65 6D 6F 76 65 20 73 74 61 6E 64 2D 69 6E 20 56 49 45 57 20 74 68 61 74 20 77 61 73 20 63 72 65 61 74 65 64 20 65 61 72 6C 69 65 72 0A 20 20 20 20 2F 2F 20 28 20 24 5F 52 45 51 55 45 53 54 5B 27 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 27 5D 20 69 73 20 75 73 65 64 20 69 6E 20 6D 6F 76 65 43 6F 70 79 28 29 20 29 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 27 5D 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 65 6D 70 5F 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 20 3D 20 24 5F 52 45 51 55 45 53 54 5B 27 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 27 5D 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 27 5D 20 3D 20 27 74 72 75 65 27 3B 0A 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 76 69 65 77 73 20 61 73 20 24 76 69 65 77 29 20 7B 0A 20 20 20 20 20 20 20 20 24 63 6F 70 79 69 6E 67 5F 73 75 63 63 65 65 64 65 64 20 3D 20 50 4D 41 5F 54 61 62 6C 65 3A 3A 6D 6F 76 65 43 6F 70 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 2C 20 24 76 69 65 77 2C 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 2C 20 24 76 69 65 77 2C 20 27 73 74 72 75 63 74 75 72 65 27 2C 20 24 6D 6F 76 65 2C 20 27 64 62 5F 63 6F 70 79 27 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 21 20 24 63 6F 70 79 69 6E 67 5F 73 75 63 63 65 65 64 65 64 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 5F 65 72 72 6F 72 20 3D 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6B 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 20 20 20 20 75 6E 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 27 5D 29 3B 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 74 65 6D 70 5F 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 29 29 20 7B 0A 20 20 20 20 20 20 20 20 2F 2F 20 72 65 73 74 6F 72 65 20 70 72 65 76 69 6F 75 73 20 76 61 6C 75 65 0A 20 20 20 20 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 27 5D 20 3D 20 24 74 65 6D 70 5F 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 3B 0A 20 20 20 20 7D 0A 20 20 20 20 72 65 74 75 72 6E 20 24 5F 65 72 72 6F 72 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 43 72 65 61 74 65 20 61 6C 6C 20 61 63 63 75 6D 75 6C 61 74 65 64 20 63 6F 6E 73 74 72 61 61 69 6E 74 73 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 76 6F 69 64 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 63 72 65 61 74 65 41 6C 6C 41 63 63 75 6D 75 6C 61 74 65 64 43 6F 6E 73 74 72 61 69 6E 74 73 28 29 0A 7B 0A 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 73 65 6C 65 63 74 44 62 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 5F 66 75 6C 6C 5F 64 62 27 5D 20 61 73 20 24 6F 6E 65 5F 71 75 65 72 79 29 20 7B 0A 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 6F 6E 65 5F 71 75 65 72 79 29 3B 0A 20 20 20 20 20 20 20 20 2F 2F 20 61 6E 64 20 70 72 65 70 61 72 65 20 74 6F 20 64 69 73 70 6C 61 79 20 74 68 65 6D 0A 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 71 75 65 72 79 27 5D 20 2E 3D 20 22 5C 6E 22 20 2E 20 24 6F 6E 65 5F 71 75 65 72 79 3B 0A 20 20 20 20 7D 0A 20 20 20 20 75 6E 73 65 74 28 24 47 4C 4F 42 41 4C 53 5B 27 73 71 6C 5F 63 6F 6E 73 74 72 61 69 6E 74 73 5F 71 75 65 72 79 5F 66 75 6C 6C 5F 64 62 27 5D 29 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 44 75 70 6C 69 63 61 74 65 20 74 68 65 20 62 6F 6F 6B 6D 61 72 6B 73 20 66 6F 72 20 74 68 65 20 64 62 20 28 64 6F 6E 65 20 6F 6E 63 65 20 66 6F 72 20 65 61 63 68 20 64 62 29 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 5F 65 72 72 6F 72 20 77 68 65 74 68 65 72 20 74 61 62 6C 65 20 72 65 6E 61 6D 65 2F 63 6F 70 79 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 64 62 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6E 61 6D 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 76 6F 69 64 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 64 75 70 6C 69 63 61 74 65 42 6F 6F 6B 6D 61 72 6B 73 28 24 5F 65 72 72 6F 72 2C 20 24 64 62 29 0A 7B 0A 20 20 20 20 69 66 20 28 21 20 24 5F 65 72 72 6F 72 20 26 26 20 24 64 62 20 21 3D 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 20 7B 0A 20 20 20 20 20 20 20 20 24 67 65 74 5F 66 69 65 6C 64 73 20 3D 20 61 72 72 61 79 28 27 75 73 65 72 27 2C 20 27 6C 61 62 65 6C 27 2C 20 27 71 75 65 72 79 27 29 3B 0A 20 20 20 20 20 20 20 20 24 77 68 65 72 65 5F 66 69 65 6C 64 73 20 3D 20 61 72 72 61 79 28 27 64 62 61 73 65 27 20 3D 3E 20 24 64 62 29 3B 0A 20 20 20 20 20 20 20 20 24 6E 65 77 5F 66 69 65 6C 64 73 20 3D 20 61 72 72 61 79 28 27 64 62 61 73 65 27 20 3D 3E 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 6E 61 6D 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 50 4D 41 5F 54 61 62 6C 65 3A 3A 64 75 70 6C 69 63 61 74 65 49 6E 66 6F 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 62 6F 6F 6B 6D 61 72 6B 77 6F 72 6B 27 2C 20 27 62 6F 6F 6B 6D 61 72 6B 27 2C 20 24 67 65 74 5F 66 69 65 6C 64 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 77 68 65 72 65 5F 66 69 65 6C 64 73 2C 20 24 6E 65 77 5F 66 69 65 6C 64 73 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 7D 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 68 65 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 6F 72 64 65 72 20 74 68 65 20 74 61 62 6C 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 63 6F 6C 75 6D 6E 73 20 63 6F 6C 75 6D 6E 73 20 61 72 72 61 79 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 4F 72 64 65 72 54 68 65 54 61 62 6C 65 28 24 63 6F 6C 75 6D 6E 73 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 6F 72 6D 20 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 69 64 3D 22 61 6C 74 65 72 54 61 62 6C 65 4F 72 64 65 72 62 79 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 61 63 74 69 6F 6E 3D 22 74 62 6C 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 0A 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 2C 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 0A 20 20 20 20 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 20 69 64 3D 22 66 69 65 6C 64 73 65 74 5F 74 61 62 6C 65 5F 6F 72 64 65 72 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 41 6C 74 65 72 20 74 61 62 6C 65 20 6F 72 64 65 72 20 62 79 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 73 65 6C 65 63 74 20 6E 61 6D 65 3D 22 6F 72 64 65 72 5F 66 69 65 6C 64 22 3E 27 3B 0A 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 63 6F 6C 75 6D 6E 73 20 61 73 20 24 66 69 65 6C 64 6E 61 6D 65 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6F 70 74 69 6F 6E 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 66 69 65 6C 64 6E 61 6D 65 5B 27 46 69 65 6C 64 27 5D 29 20 2E 20 27 22 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 66 69 65 6C 64 6E 61 6D 65 5B 27 46 69 65 6C 64 27 5D 29 20 2E 20 27 3C 2F 6F 70 74 69 6F 6E 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 73 65 6C 65 63 74 3E 20 27 20 2E 20 5F 5F 28 27 28 73 69 6E 67 6C 79 29 27 29 20 2E 20 27 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 62 72 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 69 64 3D 22 6F 72 64 65 72 5F 6F 72 64 65 72 5F 61 73 63 22 20 6E 61 6D 65 3D 22 6F 72 64 65 72 5F 6F 72 64 65 72 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 74 79 70 65 3D 22 72 61 64 69 6F 22 20 76 61 6C 75 65 3D 22 61 73 63 22 20 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 6F 72 64 65 72 5F 6F 72 64 65 72 5F 61 73 63 22 3E 27 20 2E 20 5F 5F 28 27 41 73 63 65 6E 64 69 6E 67 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 69 64 3D 22 6F 72 64 65 72 5F 6F 72 64 65 72 5F 64 65 73 63 22 20 6E 61 6D 65 3D 22 6F 72 64 65 72 5F 6F 72 64 65 72 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 74 79 70 65 3D 22 72 61 64 69 6F 22 20 76 61 6C 75 65 3D 22 64 65 73 63 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 6F 72 64 65 72 5F 6F 72 64 65 72 5F 64 65 73 63 22 3E 27 20 2E 20 5F 5F 28 27 44 65 73 63 65 6E 64 69 6E 67 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 6F 72 64 65 72 62 79 22 20 76 61 6C 75 65 3D 22 31 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 68 65 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 6D 6F 76 65 20 74 61 62 6C 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 4D 6F 76 65 54 61 62 6C 65 28 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 6F 72 6D 20 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 74 62 6C 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 69 64 3D 22 6D 6F 76 65 54 61 62 6C 65 46 6F 72 6D 22 20 63 6C 61 73 73 3D 22 61 6A 61 78 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 6F 6E 73 75 62 6D 69 74 3D 22 72 65 74 75 72 6E 20 65 6D 70 74 79 46 6F 72 6D 45 6C 65 6D 65 6E 74 73 28 74 68 69 73 2C 20 5C 27 6E 65 77 5F 6E 61 6D 65 5C 27 29 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 2C 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 72 65 6C 6F 61 64 22 20 76 61 6C 75 65 3D 22 31 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 77 68 61 74 22 20 76 61 6C 75 65 3D 22 64 61 74 61 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 69 64 3D 22 66 69 65 6C 64 73 65 74 5F 74 61 62 6C 65 5F 72 65 6E 61 6D 65 22 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 4D 6F 76 65 20 74 61 62 6C 65 20 74 6F 20 28 64 61 74 61 62 61 73 65 3C 62 3E 2E 3C 2F 62 3E 74 61 62 6C 65 29 3A 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 63 6F 75 6E 74 28 24 47 4C 4F 42 41 4C 53 5B 27 70 6D 61 27 5D 2D 3E 64 61 74 61 62 61 73 65 73 29 20 3E 20 24 47 4C 4F 42 41 4C 53 5B 27 63 66 67 27 5D 5B 27 4D 61 78 44 62 4C 69 73 74 27 5D 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 74 65 78 74 22 20 6D 61 78 6C 65 6E 67 74 68 3D 22 31 30 30 22 20 73 69 7A 65 3D 22 33 30 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 6E 61 6D 65 3D 22 74 61 72 67 65 74 5F 64 62 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 22 2F 3E 27 3B 0A 20 20 20 20 7D 20 65 6C 73 65 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 73 65 6C 65 63 74 20 63 6C 61 73 73 3D 22 68 61 6C 66 57 69 64 74 68 22 20 6E 61 6D 65 3D 22 74 61 72 67 65 74 5F 64 62 22 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 24 47 4C 4F 42 41 4C 53 5B 27 70 6D 61 27 5D 2D 3E 64 61 74 61 62 61 73 65 73 2D 3E 67 65 74 48 74 6D 6C 4F 70 74 69 6F 6E 73 28 74 72 75 65 2C 20 66 61 6C 73 65 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 73 65 6C 65 63 74 3E 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 26 6E 62 73 70 3B 3C 73 74 72 6F 6E 67 3E 2E 3C 2F 73 74 72 6F 6E 67 3E 26 6E 62 73 70 3B 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 63 6C 61 73 73 3D 22 68 61 6C 66 57 69 64 74 68 22 20 74 79 70 65 3D 22 74 65 78 74 22 20 73 69 7A 65 3D 22 32 30 22 20 6E 61 6D 65 3D 22 6E 65 77 5F 6E 61 6D 65 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 6F 6E 66 6F 63 75 73 3D 22 74 68 69 73 2E 73 65 6C 65 63 74 28 29 22 20 72 65 71 75 69 72 65 64 3D 22 72 65 71 75 69 72 65 64 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 2E 20 27 22 20 2F 3E 3C 62 72 20 2F 3E 27 3B 0A 0A 20 20 20 20 2F 2F 20 73 74 61 72 74 69 6E 67 20 77 69 74 68 20 4D 79 53 51 4C 20 35 2E 30 2E 32 34 2C 20 53 48 4F 57 20 43 52 45 41 54 45 20 54 41 42 4C 45 20 69 6E 63 6C 75 64 65 73 20 74 68 65 20 41 55 54 4F 5F 49 4E 43 52 45 4D 45 4E 54 0A 20 20 20 20 2F 2F 20 6E 65 78 74 20 76 61 6C 75 65 20 62 75 74 20 75 73 65 72 73 20 63 61 6E 20 64 65 63 69 64 65 20 69 66 20 74 68 65 79 20 77 61 6E 74 20 69 74 20 6F 72 20 6E 6F 74 20 66 6F 72 20 74 68 65 20 6F 70 65 72 61 74 69 6F 6E 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 73 71 6C 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 31 22 20 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 5F 6D 76 22 20 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 5F 6D 76 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 41 64 64 20 41 55 54 4F 5F 49 4E 43 52 45 4D 45 4E 54 20 76 61 6C 75 65 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 5F 6D 6F 76 65 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 68 65 20 48 54 4D 4C 20 64 69 76 20 66 6F 72 20 54 61 62 6C 65 20 6F 70 74 69 6F 6E 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 63 6F 6D 6D 65 6E 74 20 20 20 20 20 20 20 20 20 20 20 20 43 6F 6D 6D 65 6E 74 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 20 20 20 20 20 20 74 61 62 6C 65 20 63 6F 6C 6C 61 74 69 6F 6E 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 20 74 61 62 6C 65 20 73 74 6F 72 61 67 65 20 65 6E 67 69 6E 65 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 20 77 68 65 74 68 65 72 20 4D 59 49 53 41 4D 20 7C 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 73 61 6D 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 49 53 41 4D 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 70 61 63 6B 5F 6B 65 79 73 20 20 20 20 20 20 20 20 20 20 70 61 63 6B 20 6B 65 79 73 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 61 75 74 6F 20 69 6E 63 72 65 6D 65 6E 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 20 20 20 20 64 65 6C 61 79 20 6B 65 79 20 77 72 69 74 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 70 61 67 65 20 63 68 65 63 6B 73 75 6D 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 6E 6E 6F 64 62 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 49 4E 4E 4F 44 42 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 70 62 78 74 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 50 42 58 54 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 61 72 69 61 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 63 68 65 63 6B 73 75 6D 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63 68 65 63 6B 73 75 6D 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 54 61 62 6C 65 4F 70 74 69 6F 6E 44 69 76 28 24 63 6F 6D 6D 65 6E 74 2C 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 2C 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 2C 0A 20 20 20 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 73 61 6D 2C 20 24 70 61 63 6B 5F 6B 65 79 73 2C 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 2C 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 2C 0A 20 20 20 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 2C 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 69 73 5F 70 62 78 74 2C 20 24 69 73 5F 61 72 69 61 2C 20 24 63 68 65 63 6B 73 75 6D 0A 29 20 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 20 63 6C 65 61 72 66 6C 6F 61 74 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 6F 72 6D 20 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 74 62 6C 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 20 69 64 3D 22 74 61 62 6C 65 4F 70 74 69 6F 6E 73 46 6F 72 6D 22 20 63 6C 61 73 73 3D 22 61 6A 61 78 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 0A 20 20 20 20 20 20 20 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 2C 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 0A 20 20 20 20 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 72 65 6C 6F 61 64 22 20 76 61 6C 75 65 3D 22 31 22 20 2F 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 54 61 62 6C 65 4F 70 74 69 6F 6E 46 69 65 6C 64 73 65 74 28 0A 20 20 20 20 20 20 20 20 24 63 6F 6D 6D 65 6E 74 2C 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 2C 0A 20 20 20 20 20 20 20 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 2C 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 73 61 6D 2C 20 24 70 61 63 6B 5F 6B 65 79 73 2C 0A 20 20 20 20 20 20 20 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 2C 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 2C 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 2C 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 2C 0A 20 20 20 20 20 20 20 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 69 73 5F 70 62 78 74 2C 20 24 69 73 5F 61 72 69 61 2C 20 24 63 68 65 63 6B 73 75 6D 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 6F 70 74 69 6F 6E 73 22 20 76 61 6C 75 65 3D 22 31 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 66 69 65 6C 64 73 65 74 20 66 6F 72 20 54 61 62 6C 65 20 6F 70 74 69 6F 6E 2C 20 69 74 20 63 6F 6E 74 61 69 6E 73 20 48 54 4D 4C 20 74 61 62 6C 65 20 66 6F 72 20 6F 70 74 69 6F 6E 73 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 63 6F 6D 6D 65 6E 74 20 20 20 20 20 20 20 20 20 20 20 20 43 6F 6D 6D 65 6E 74 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 20 20 20 20 20 20 74 61 62 6C 65 20 63 6F 6C 6C 61 74 69 6F 6E 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 20 74 61 62 6C 65 20 73 74 6F 72 61 67 65 20 65 6E 67 69 6E 65 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 20 77 68 65 74 68 65 72 20 4D 59 49 53 41 4D 20 7C 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 73 61 6D 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 49 53 41 4D 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 70 61 63 6B 5F 6B 65 79 73 20 20 20 20 20 20 20 20 20 20 70 61 63 6B 20 6B 65 79 73 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 20 20 20 20 64 65 6C 61 79 20 6B 65 79 20 77 72 69 74 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 61 75 74 6F 20 69 6E 63 72 65 6D 65 6E 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 70 61 67 65 20 63 68 65 63 6B 73 75 6D 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 6E 6E 6F 64 62 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 49 4E 4E 4F 44 42 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 70 62 78 74 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 50 42 58 54 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 61 72 69 61 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 63 68 65 63 6B 73 75 6D 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63 68 65 63 6B 73 75 6D 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 54 61 62 6C 65 4F 70 74 69 6F 6E 46 69 65 6C 64 73 65 74 28 24 63 6F 6D 6D 65 6E 74 2C 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 2C 0A 20 20 20 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 2C 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 73 61 6D 2C 20 24 70 61 63 6B 5F 6B 65 79 73 2C 0A 20 20 20 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 2C 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 2C 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 2C 0A 20 20 20 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 69 73 5F 70 62 78 74 2C 20 24 69 73 5F 61 72 69 61 2C 20 24 63 68 65 63 6B 73 75 6D 0A 29 20 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 54 61 62 6C 65 20 6F 70 74 69 6F 6E 73 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 61 62 6C 65 3E 27 3B 0A 20 20 20 20 2F 2F 43 68 61 6E 67 65 20 74 61 62 6C 65 20 6E 61 6D 65 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 3C 74 64 3E 27 20 2E 20 5F 5F 28 27 52 65 6E 61 6D 65 20 74 61 62 6C 65 20 74 6F 27 29 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 74 65 78 74 22 20 73 69 7A 65 3D 22 32 30 22 20 6E 61 6D 65 3D 22 6E 65 77 5F 6E 61 6D 65 22 20 6F 6E 66 6F 63 75 73 3D 22 74 68 69 73 2E 73 65 6C 65 63 74 28 29 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 2E 20 27 22 20 72 65 71 75 69 72 65 64 3D 22 72 65 71 75 69 72 65 64 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 27 3B 0A 0A 20 20 20 20 2F 2F 54 61 62 6C 65 20 63 6F 6D 6D 65 6E 74 73 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 3C 74 64 3E 27 20 2E 20 5F 5F 28 27 54 61 62 6C 65 20 63 6F 6D 6D 65 6E 74 73 27 29 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 74 65 78 74 22 20 6E 61 6D 65 3D 22 63 6F 6D 6D 65 6E 74 22 20 6D 61 78 6C 65 6E 67 74 68 3D 22 36 30 22 20 73 69 7A 65 3D 22 33 30 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 63 6F 6D 6D 65 6E 74 29 20 2E 20 27 22 20 6F 6E 66 6F 63 75 73 3D 22 74 68 69 73 2E 73 65 6C 65 63 74 28 29 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 70 72 65 76 5F 63 6F 6D 6D 65 6E 74 22 20 76 61 6C 75 65 3D 22 27 0A 20 20 20 20 20 20 20 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 63 6F 6D 6D 65 6E 74 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 27 3B 0A 0A 20 20 20 20 2F 2F 53 74 6F 72 61 67 65 20 65 6E 67 69 6E 65 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 3C 74 64 3E 27 20 2E 20 5F 5F 28 27 53 74 6F 72 61 67 65 20 45 6E 67 69 6E 65 27 29 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 4D 79 53 51 4C 44 6F 63 75 28 27 53 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 73 27 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 3A 3A 67 65 74 48 74 6D 6C 53 65 6C 65 63 74 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 6E 65 77 5F 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 27 2C 20 6E 75 6C 6C 2C 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 0A 20 20 20 20 20 20 20 20 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 27 3B 0A 0A 20 20 20 20 2F 2F 54 61 62 6C 65 20 63 68 61 72 61 63 74 65 72 20 73 65 74 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 3C 74 64 3E 27 20 2E 20 5F 5F 28 27 43 6F 6C 6C 61 74 69 6F 6E 27 29 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 67 65 6E 65 72 61 74 65 43 68 61 72 73 65 74 44 72 6F 70 64 6F 77 6E 42 6F 78 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 50 4D 41 5F 43 53 44 52 4F 50 44 4F 57 4E 5F 43 4F 4C 4C 41 54 49 4F 4E 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 27 2C 20 6E 75 6C 6C 2C 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 2C 20 66 61 6C 73 65 2C 20 33 0A 20 20 20 20 20 20 20 20 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 73 61 6D 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 6E 65 77 5F 70 61 63 6B 5F 6B 65 79 73 22 3E 50 41 43 4B 5F 4B 45 59 53 3C 2F 6C 61 62 65 6C 3E 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 3C 73 65 6C 65 63 74 20 6E 61 6D 65 3D 22 6E 65 77 5F 70 61 63 6B 5F 6B 65 79 73 22 20 69 64 3D 22 6E 65 77 5F 70 61 63 6B 5F 6B 65 79 73 22 3E 27 3B 0A 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6F 70 74 69 6F 6E 20 76 61 6C 75 65 3D 22 44 45 46 41 55 4C 54 22 27 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 70 61 63 6B 5F 6B 65 79 73 20 3D 3D 20 27 44 45 46 41 55 4C 54 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 73 65 6C 65 63 74 65 64 3D 22 73 65 6C 65 63 74 65 64 22 27 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3E 44 45 46 41 55 4C 54 3C 2F 6F 70 74 69 6F 6E 3E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3C 6F 70 74 69 6F 6E 20 76 61 6C 75 65 3D 22 30 22 27 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 70 61 63 6B 5F 6B 65 79 73 20 3D 3D 20 27 30 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 73 65 6C 65 63 74 65 64 3D 22 73 65 6C 65 63 74 65 64 22 27 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3E 30 3C 2F 6F 70 74 69 6F 6E 3E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3C 6F 70 74 69 6F 6E 20 76 61 6C 75 65 3D 22 31 22 20 27 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 70 61 63 6B 5F 6B 65 79 73 20 3D 3D 20 27 31 27 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 73 65 6C 65 63 74 65 64 3D 22 73 65 6C 65 63 74 65 64 22 27 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3E 31 3C 2F 6F 70 74 69 6F 6E 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 73 65 6C 65 63 74 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 27 3B 0A 20 20 20 20 7D 20 2F 2F 20 65 6E 64 20 69 66 20 28 4D 59 49 53 41 4D 7C 49 53 41 4D 29 0A 0A 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 54 61 62 6C 65 52 6F 77 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 6E 65 77 5F 63 68 65 63 6B 73 75 6D 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 43 48 45 43 4B 53 55 4D 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 63 68 65 63 6B 73 75 6D 0A 20 20 20 20 20 20 20 20 29 3B 0A 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 54 61 62 6C 65 52 6F 77 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 6E 65 77 5F 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 44 45 4C 41 59 5F 4B 45 59 5F 57 52 49 54 45 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 7D 20 2F 2F 20 65 6E 64 20 69 66 20 28 4D 59 49 53 41 4D 29 0A 0A 20 20 20 20 69 66 20 28 24 69 73 5F 61 72 69 61 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 54 61 62 6C 65 52 6F 77 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 6E 65 77 5F 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 54 52 41 4E 53 41 43 54 49 4F 4E 41 4C 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 0A 20 20 20 20 20 20 20 20 29 3B 0A 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 54 61 62 6C 65 52 6F 77 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 6E 65 77 5F 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 50 41 47 45 5F 43 48 45 43 4B 53 55 4D 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 7D 20 2F 2F 20 65 6E 64 20 69 66 20 28 41 52 49 41 29 0A 0A 20 20 20 20 69 66 20 28 73 74 72 6C 65 6E 28 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 29 20 3E 20 30 0A 20 20 20 20 20 20 20 20 26 26 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 6E 6E 6F 64 62 20 7C 7C 20 24 69 73 5F 70 62 78 74 29 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 3C 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 5F 6F 70 74 22 3E 41 55 54 4F 5F 49 4E 43 52 45 4D 45 4E 54 3C 2F 6C 61 62 65 6C 3E 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 6E 75 6D 62 65 72 22 20 6E 61 6D 65 3D 22 6E 65 77 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 69 64 3D 22 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 5F 6F 70 74 22 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 20 2E 20 27 22 20 2F 3E 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 20 27 3B 0A 20 20 20 20 7D 20 2F 2F 20 65 6E 64 20 69 66 20 28 4D 59 49 53 41 4D 7C 49 4E 4E 4F 44 42 29 0A 0A 20 20 20 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 20 3D 20 50 4D 41 5F 67 65 74 50 6F 73 73 69 62 6C 65 52 6F 77 46 6F 72 6D 61 74 28 29 3B 0A 0A 20 20 20 20 2F 2F 20 66 6F 72 20 4D 59 49 53 41 4D 20 74 68 65 72 65 20 69 73 20 61 6C 73 6F 20 43 4F 4D 50 52 45 53 53 45 44 20 62 75 74 20 69 74 20 63 61 6E 20 62 65 20 73 65 74 20 6F 6E 6C 79 20 62 79 20 74 68 65 0A 20 20 20 20 2F 2F 20 6D 79 69 73 61 6D 70 61 63 6B 20 75 74 69 6C 69 74 79 2C 20 73 6F 20 64 6F 6E 27 74 20 6F 66 66 65 72 20 68 65 72 65 20 74 68 65 20 63 68 6F 69 63 65 20 62 65 63 61 75 73 65 20 69 66 20 77 65 0A 20 20 20 20 2F 2F 20 74 72 79 20 69 74 20 69 6E 73 69 64 65 20 61 6E 20 41 4C 54 45 52 20 54 41 42 4C 45 2C 20 4D 79 53 51 4C 20 28 61 74 20 6C 65 61 73 74 20 69 6E 20 35 2E 31 2E 32 33 2D 6D 61 72 69 61 29 0A 20 20 20 20 2F 2F 20 64 6F 65 73 20 6E 6F 74 20 72 65 74 75 72 6E 20 61 20 77 61 72 6E 69 6E 67 0A 20 20 20 20 2F 2F 20 28 69 66 20 74 68 65 20 74 61 62 6C 65 20 77 61 73 20 63 6F 6D 70 72 65 73 73 65 64 2C 20 69 74 20 63 61 6E 20 62 65 20 73 65 65 6E 20 6F 6E 20 74 68 65 20 53 74 72 75 63 74 75 72 65 20 70 61 67 65 29 0A 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 5B 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 5D 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 63 75 72 72 65 6E 74 5F 72 6F 77 5F 66 6F 72 6D 61 74 20 3D 20 73 74 72 74 6F 75 70 70 65 72 28 24 47 4C 4F 42 41 4C 53 5B 27 73 68 6F 77 74 61 62 6C 65 27 5D 5B 27 52 6F 77 5F 66 6F 72 6D 61 74 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 74 72 3E 3C 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 6E 65 77 5F 72 6F 77 5F 66 6F 72 6D 61 74 22 3E 52 4F 57 5F 46 4F 52 4D 41 54 3C 2F 6C 61 62 65 6C 3E 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 27 3B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 44 72 6F 70 64 6F 77 6E 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 6E 65 77 5F 72 6F 77 5F 66 6F 72 6D 61 74 27 2C 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 5B 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 5D 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 63 75 72 72 65 6E 74 5F 72 6F 77 5F 66 6F 72 6D 61 74 2C 20 27 6E 65 77 5F 72 6F 77 5F 66 6F 72 6D 61 74 27 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 74 64 3E 3C 2F 74 72 3E 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 74 61 62 6C 65 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 68 65 20 63 6F 6D 6D 6F 6E 20 48 54 4D 4C 20 74 61 62 6C 65 20 72 6F 77 20 28 74 72 29 20 66 6F 72 20 6E 65 77 5F 63 68 65 63 6B 73 75 6D 2C 20 6E 65 77 5F 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 2C 0A 20 2A 20 6E 65 77 5F 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 20 61 6E 64 20 6E 65 77 5F 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 61 74 74 72 69 62 75 74 65 20 63 6C 61 73 73 2C 20 6E 61 6D 65 20 61 6E 64 20 69 64 20 61 74 74 72 69 62 75 74 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 6C 61 62 65 6C 20 20 20 20 20 6C 61 62 65 6C 20 76 61 6C 75 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 76 61 6C 20 20 20 20 20 20 20 63 68 65 63 6B 73 75 6D 2C 20 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 2C 20 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 2C 20 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 54 61 62 6C 65 52 6F 77 28 24 61 74 74 72 69 62 75 74 65 2C 20 24 6C 61 62 65 6C 2C 20 24 76 61 6C 29 0A 7B 0A 20 20 20 20 72 65 74 75 72 6E 20 27 3C 74 72 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 27 20 2E 20 24 61 74 74 72 69 62 75 74 65 20 2E 20 27 22 3E 27 20 2E 20 24 6C 61 62 65 6C 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 74 64 3E 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 27 20 2E 20 24 61 74 74 72 69 62 75 74 65 20 2E 20 27 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 69 64 3D 22 27 20 2E 20 24 61 74 74 72 69 62 75 74 65 20 2E 20 27 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 76 61 6C 75 65 3D 22 31 22 27 0A 20 20 20 20 20 20 20 20 2E 20 28 28 21 65 6D 70 74 79 28 24 76 61 6C 29 20 26 26 20 24 76 61 6C 20 3D 3D 20 31 29 20 3F 20 27 20 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 27 20 3A 20 27 27 29 20 2E 20 27 2F 3E 3C 2F 74 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 74 72 3E 27 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 61 72 72 61 79 20 6F 66 20 70 6F 73 73 69 62 6C 65 20 72 6F 77 20 66 6F 72 6D 61 74 73 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 50 6F 73 73 69 62 6C 65 52 6F 77 46 6F 72 6D 61 74 28 29 0A 7B 0A 20 20 20 20 2F 2F 20 74 68 65 20 6F 75 74 65 72 20 61 72 72 61 79 20 69 73 20 66 6F 72 20 65 6E 67 69 6E 65 73 2C 20 74 68 65 20 69 6E 6E 65 72 20 61 72 72 61 79 20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 64 72 6F 70 64 6F 77 6E 0A 20 20 20 20 2F 2F 20 6F 70 74 69 6F 6E 20 76 61 6C 75 65 73 20 61 73 20 6B 65 79 73 20 74 68 65 6E 20 74 68 65 20 64 72 6F 70 64 6F 77 6E 20 6F 70 74 69 6F 6E 20 6C 61 62 65 6C 73 0A 0A 20 20 20 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 27 41 52 49 41 27 20 20 3D 3E 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 46 49 58 45 44 27 20 20 20 20 20 3D 3E 20 27 46 49 58 45 44 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 44 59 4E 41 4D 49 43 27 20 20 20 3D 3E 20 27 44 59 4E 41 4D 49 43 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 50 41 47 45 27 20 20 20 20 20 20 3D 3E 20 27 50 41 47 45 27 0A 20 20 20 20 20 20 20 20 29 2C 0A 20 20 20 20 20 20 20 20 27 4D 41 52 49 41 27 20 20 3D 3E 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 46 49 58 45 44 27 20 20 20 20 20 3D 3E 20 27 46 49 58 45 44 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 44 59 4E 41 4D 49 43 27 20 20 20 3D 3E 20 27 44 59 4E 41 4D 49 43 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 50 41 47 45 27 20 20 20 20 20 20 3D 3E 20 27 50 41 47 45 27 0A 20 20 20 20 20 20 20 20 29 2C 0A 20 20 20 20 20 20 20 20 27 4D 59 49 53 41 4D 27 20 3D 3E 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 27 46 49 58 45 44 27 20 20 20 20 3D 3E 20 27 46 49 58 45 44 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 27 44 59 4E 41 4D 49 43 27 20 20 3D 3E 20 27 44 59 4E 41 4D 49 43 27 0A 20 20 20 20 20 20 20 20 29 2C 0A 20 20 20 20 20 20 20 20 27 50 42 58 54 27 20 20 20 3D 3E 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 27 46 49 58 45 44 27 20 20 20 20 3D 3E 20 27 46 49 58 45 44 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 27 44 59 4E 41 4D 49 43 27 20 20 3D 3E 20 27 44 59 4E 41 4D 49 43 27 0A 20 20 20 20 20 20 20 20 29 2C 0A 20 20 20 20 20 20 20 20 27 49 4E 4E 4F 44 42 27 20 3D 3E 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 27 43 4F 4D 50 41 43 54 27 20 20 3D 3E 20 27 43 4F 4D 50 41 43 54 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 27 52 45 44 55 4E 44 41 4E 54 27 20 3D 3E 20 27 52 45 44 55 4E 44 41 4E 54 27 0A 20 20 20 20 20 20 20 20 29 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 69 6E 6E 6F 64 62 45 6E 67 69 6E 65 50 6C 75 67 69 6E 20 3D 20 50 4D 41 5F 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 3A 3A 67 65 74 45 6E 67 69 6E 65 28 27 69 6E 6E 6F 64 62 27 29 3B 0A 20 20 20 20 24 69 6E 6E 6F 64 62 50 6C 75 67 69 6E 56 65 72 73 69 6F 6E 20 3D 20 24 69 6E 6E 6F 64 62 45 6E 67 69 6E 65 50 6C 75 67 69 6E 2D 3E 67 65 74 49 6E 6E 6F 64 62 50 6C 75 67 69 6E 56 65 72 73 69 6F 6E 28 29 3B 0A 20 20 20 20 69 66 20 28 21 65 6D 70 74 79 28 24 69 6E 6E 6F 64 62 50 6C 75 67 69 6E 56 65 72 73 69 6F 6E 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 69 6E 6E 6F 64 62 5F 66 69 6C 65 5F 66 6F 72 6D 61 74 20 3D 20 24 69 6E 6E 6F 64 62 45 6E 67 69 6E 65 50 6C 75 67 69 6E 2D 3E 67 65 74 49 6E 6E 6F 64 62 46 69 6C 65 46 6F 72 6D 61 74 28 29 3B 0A 20 20 20 20 7D 20 65 6C 73 65 20 7B 0A 20 20 20 20 20 20 20 20 24 69 6E 6E 6F 64 62 5F 66 69 6C 65 5F 66 6F 72 6D 61 74 20 3D 20 27 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 69 66 20 28 27 42 61 72 72 61 63 75 64 61 27 20 3D 3D 20 24 69 6E 6E 6F 64 62 5F 66 69 6C 65 5F 66 6F 72 6D 61 74 0A 20 20 20 20 20 20 20 20 26 26 20 24 69 6E 6E 6F 64 62 45 6E 67 69 6E 65 50 6C 75 67 69 6E 2D 3E 73 75 70 70 6F 72 74 73 46 69 6C 65 50 65 72 54 61 62 6C 65 28 29 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 5B 27 49 4E 4E 4F 44 42 27 5D 5B 27 44 59 4E 41 4D 49 43 27 5D 20 3D 20 27 44 59 4E 41 4D 49 43 27 3B 0A 20 20 20 20 20 20 20 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 5B 27 49 4E 4E 4F 44 42 27 5D 5B 27 43 4F 4D 50 52 45 53 53 45 44 27 5D 20 3D 20 27 43 4F 4D 50 52 45 53 53 45 44 27 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 70 6F 73 73 69 62 6C 65 5F 72 6F 77 5F 66 6F 72 6D 61 74 73 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 64 69 76 20 66 6F 72 20 63 6F 70 79 20 74 61 62 6C 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 43 6F 70 79 74 61 62 6C 65 28 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 6F 72 6D 20 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 74 62 6C 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 6E 61 6D 65 3D 22 63 6F 70 79 54 61 62 6C 65 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 69 64 3D 22 63 6F 70 79 54 61 62 6C 65 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 63 6C 61 73 73 3D 22 61 6A 61 78 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 6F 6E 73 75 62 6D 69 74 3D 22 72 65 74 75 72 6E 20 65 6D 70 74 79 46 6F 72 6D 45 6C 65 6D 65 6E 74 73 28 74 68 69 73 2C 20 5C 27 6E 65 77 5F 6E 61 6D 65 5C 27 29 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 2C 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 72 65 6C 6F 61 64 22 20 76 61 6C 75 65 3D 22 31 22 20 2F 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 65 67 65 6E 64 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 43 6F 70 79 20 74 61 62 6C 65 20 74 6F 20 28 64 61 74 61 62 61 73 65 3C 62 3E 2E 3C 2F 62 3E 74 61 62 6C 65 29 3A 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 63 6F 75 6E 74 28 24 47 4C 4F 42 41 4C 53 5B 27 70 6D 61 27 5D 2D 3E 64 61 74 61 62 61 73 65 73 29 20 3E 20 24 47 4C 4F 42 41 4C 53 5B 27 63 66 67 27 5D 5B 27 4D 61 78 44 62 4C 69 73 74 27 5D 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 63 6C 61 73 73 3D 22 68 61 6C 66 57 69 64 74 68 22 20 74 79 70 65 3D 22 74 65 78 74 22 20 6D 61 78 6C 65 6E 67 74 68 3D 22 31 30 30 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 73 69 7A 65 3D 22 33 30 22 20 6E 61 6D 65 3D 22 74 61 72 67 65 74 5F 64 62 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 29 20 2E 20 27 22 2F 3E 27 3B 0A 20 20 20 20 7D 20 65 6C 73 65 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 73 65 6C 65 63 74 20 63 6C 61 73 73 3D 22 68 61 6C 66 57 69 64 74 68 22 20 6E 61 6D 65 3D 22 74 61 72 67 65 74 5F 64 62 22 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 24 47 4C 4F 42 41 4C 53 5B 27 70 6D 61 27 5D 2D 3E 64 61 74 61 62 61 73 65 73 2D 3E 67 65 74 48 74 6D 6C 4F 70 74 69 6F 6E 73 28 74 72 75 65 2C 20 66 61 6C 73 65 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 73 65 6C 65 63 74 3E 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 26 6E 62 73 70 3B 3C 73 74 72 6F 6E 67 3E 2E 3C 2F 73 74 72 6F 6E 67 3E 26 6E 62 73 70 3B 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 63 6C 61 73 73 3D 22 68 61 6C 66 57 69 64 74 68 22 20 74 79 70 65 3D 22 74 65 78 74 22 20 72 65 71 75 69 72 65 64 3D 22 72 65 71 75 69 72 65 64 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 73 69 7A 65 3D 22 32 30 22 20 6E 61 6D 65 3D 22 6E 65 77 5F 6E 61 6D 65 22 20 6F 6E 66 6F 63 75 73 3D 22 74 68 69 73 2E 73 65 6C 65 63 74 28 29 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 27 20 2E 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 2E 20 27 22 2F 3E 3C 62 72 20 2F 3E 27 3B 0A 0A 20 20 20 20 24 63 68 6F 69 63 65 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 73 74 72 75 63 74 75 72 65 27 20 3D 3E 20 5F 5F 28 27 53 74 72 75 63 74 75 72 65 20 6F 6E 6C 79 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 64 61 74 61 27 20 20 20 20 20 20 3D 3E 20 5F 5F 28 27 53 74 72 75 63 74 75 72 65 20 61 6E 64 20 64 61 74 61 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 64 61 74 61 6F 6E 6C 79 27 20 20 3D 3E 20 5F 5F 28 27 44 61 74 61 20 6F 6E 6C 79 27 29 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 52 61 64 69 6F 46 69 65 6C 64 73 28 0A 20 20 20 20 20 20 20 20 27 77 68 61 74 27 2C 20 24 63 68 6F 69 63 65 73 2C 20 27 64 61 74 61 27 2C 20 74 72 75 65 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 64 72 6F 70 5F 69 66 5F 65 78 69 73 74 73 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 74 72 75 65 22 20 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 64 72 6F 70 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 64 72 6F 70 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 73 70 72 69 6E 74 66 28 5F 5F 28 27 41 64 64 20 25 73 27 29 2C 20 27 44 52 4F 50 20 54 41 42 4C 45 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 73 71 6C 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 31 22 20 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 5F 63 70 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 5F 63 70 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 41 64 64 20 41 55 54 4F 5F 49 4E 43 52 45 4D 45 4E 54 20 76 61 6C 75 65 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 3B 0A 0A 20 20 20 20 2F 2F 20 64 69 73 70 6C 61 79 20 22 41 64 64 20 63 6F 6E 73 74 72 61 69 6E 74 73 22 20 63 68 6F 69 63 65 20 6F 6E 6C 79 20 69 66 20 74 68 65 72 65 20 61 72 65 0A 20 20 20 20 2F 2F 20 66 6F 72 65 69 67 6E 20 6B 65 79 73 0A 20 20 20 20 69 66 20 28 50 4D 41 5F 67 65 74 46 6F 72 65 69 67 6E 65 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 2C 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 2C 20 27 27 2C 20 27 66 6F 72 65 69 67 6E 27 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 61 64 64 5F 63 6F 6E 73 74 72 61 69 6E 74 73 22 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 76 61 6C 75 65 3D 22 31 22 20 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 63 6F 6E 73 74 72 61 69 6E 74 73 22 20 2F 3E 27 3B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 63 6F 6E 73 74 72 61 69 6E 74 73 22 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 41 64 64 20 63 6F 6E 73 74 72 61 69 6E 74 73 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 3C 62 72 20 2F 3E 27 3B 0A 20 20 20 20 7D 20 2F 2F 20 65 6E 64 69 66 0A 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 43 4F 4F 4B 49 45 5B 27 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 43 4F 4F 4B 49 45 5B 27 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 27 5D 20 3D 3D 20 27 74 72 75 65 27 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 20 3D 20 27 74 72 75 65 27 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 63 68 65 63 6B 62 6F 78 22 20 6E 61 6D 65 3D 22 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 22 20 76 61 6C 75 65 3D 22 74 72 75 65 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 69 64 3D 22 63 68 65 63 6B 62 6F 78 5F 73 77 69 74 63 68 22 27 0A 20 20 20 20 20 20 20 20 2E 20 28 28 69 73 73 65 74 28 24 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 29 20 26 26 20 24 70 6D 61 5F 73 77 69 74 63 68 5F 74 6F 5F 6E 65 77 20 3D 3D 20 27 74 72 75 65 27 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 3F 20 27 20 63 68 65 63 6B 65 64 3D 22 63 68 65 63 6B 65 64 22 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 27 27 20 2E 20 27 2F 3E 27 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 61 62 65 6C 20 66 6F 72 3D 22 63 68 65 63 6B 62 6F 78 5F 73 77 69 74 63 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 53 77 69 74 63 68 20 74 6F 20 63 6F 70 69 65 64 20 74 61 62 6C 65 27 29 20 2E 20 27 3C 2F 6C 61 62 65 6C 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 5F 63 6F 70 79 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 74 61 62 6C 65 20 6D 61 69 6E 74 65 6E 63 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 77 68 65 74 68 65 72 20 4D 59 49 53 41 4D 20 7C 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 6E 6E 6F 64 62 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 69 6E 6E 6F 64 62 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 20 20 20 20 20 77 68 65 74 68 65 72 20 20 62 65 72 6B 65 6C 65 79 64 62 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 20 20 20 20 20 20 20 20 61 72 72 61 79 20 6F 66 20 55 52 4C 20 70 61 72 61 6D 65 74 65 72 73 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 54 61 62 6C 65 4D 61 69 6E 74 65 6E 61 6E 63 65 28 0A 20 20 20 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 2C 20 24 75 72 6C 5F 70 61 72 61 6D 73 0A 29 20 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 54 61 62 6C 65 20 6D 61 69 6E 74 65 6E 61 6E 63 65 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 75 6C 20 69 64 3D 22 74 62 6C 5F 6D 61 69 6E 74 65 6E 61 6E 63 65 22 3E 27 3B 0A 0A 20 20 20 20 2F 2F 20 4E 6F 74 65 3A 20 42 45 52 4B 45 4C 45 59 20 28 42 44 42 29 20 69 73 20 6E 6F 20 6C 6F 6E 67 65 72 20 73 75 70 70 6F 72 74 65 64 2C 20 73 74 61 72 74 69 6E 67 20 77 69 74 68 20 4D 79 53 51 4C 20 35 2E 31 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4C 69 73 74 6F 66 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 4C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 75 6C 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 27 6C 69 27 20 68 61 76 69 6E 67 20 61 20 6C 69 6E 6B 20 6F 66 20 6D 61 69 6E 74 61 69 6E 20 61 63 74 69 6F 6E 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 77 68 65 74 68 65 72 20 4D 59 49 53 41 4D 20 7C 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 6E 6E 6F 64 62 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 69 6E 6E 6F 64 62 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 20 20 20 20 20 20 20 20 61 72 72 61 79 20 6F 66 20 55 52 4C 20 70 61 72 61 6D 65 74 65 72 73 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 20 20 20 20 20 77 68 65 74 68 65 72 20 20 62 65 72 6B 65 6C 65 79 64 62 20 6F 72 20 6E 6F 74 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 4C 69 73 74 6F 66 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 4C 69 6E 6B 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 0A 20 20 20 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 0A 29 20 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 27 3B 0A 0A 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 6E 6E 6F 64 62 20 7C 7C 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 29 20 7B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 6E 6E 6F 64 62 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 43 48 45 43 4B 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 74 61 62 6C 65 5F 6D 61 69 6E 74 65 6E 61 6E 63 65 27 20 3D 3E 20 27 47 6F 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 43 68 65 63 6B 20 74 61 62 6C 65 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 43 48 45 43 4B 5F 54 41 42 4C 45 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 69 73 5F 69 6E 6E 6F 64 62 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 41 4C 54 45 52 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 45 4E 47 49 4E 45 20 3D 20 49 6E 6E 6F 44 42 3B 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 44 65 66 72 61 67 6D 65 6E 74 20 74 61 62 6C 65 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 49 6E 6E 6F 44 42 5F 46 69 6C 65 5F 44 65 66 72 61 67 6D 65 6E 74 69 6E 67 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 54 61 62 6C 65 5F 74 79 70 65 73 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 69 73 5F 69 6E 6E 6F 64 62 20 7C 7C 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 41 4E 41 4C 59 5A 45 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 74 61 62 6C 65 5F 6D 61 69 6E 74 65 6E 61 6E 63 65 27 20 3D 3E 20 27 47 6F 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 41 6E 61 6C 79 7A 65 20 74 61 62 6C 65 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 41 4E 41 4C 59 5A 45 5F 54 41 42 4C 45 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 26 26 20 21 50 4D 41 5F 44 52 49 5A 5A 4C 45 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 52 45 50 41 49 52 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 74 61 62 6C 65 5F 6D 61 69 6E 74 65 6E 61 6E 63 65 27 20 3D 3E 20 27 47 6F 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 52 65 70 61 69 72 20 74 61 62 6C 65 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 52 45 50 41 49 52 5F 54 41 42 4C 45 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 69 66 20 28 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 6E 6E 6F 64 62 20 7C 7C 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 21 50 4D 41 5F 44 52 49 5A 5A 4C 45 0A 20 20 20 20 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 4F 50 54 49 4D 49 5A 45 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 74 61 62 6C 65 5F 6D 61 69 6E 74 65 6E 61 6E 63 65 27 20 3D 3E 20 27 47 6F 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 4F 70 74 69 6D 69 7A 65 20 74 61 62 6C 65 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 4F 50 54 49 4D 49 5A 45 5F 54 41 42 4C 45 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 20 2F 2F 20 65 6E 64 20 4D 59 49 53 41 4D 20 6F 72 20 42 45 52 4B 45 4C 45 59 44 42 20 63 61 73 65 0A 0A 20 20 20 20 24 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 46 4C 55 53 48 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 2C 0A 20 20 20 20 20 20 20 20 27 6D 65 73 73 61 67 65 5F 74 6F 5F 73 68 6F 77 27 20 3D 3E 20 73 70 72 69 6E 74 66 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 54 61 62 6C 65 20 25 73 20 68 61 73 20 62 65 65 6E 20 66 6C 75 73 68 65 64 2E 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 29 2C 0A 20 20 20 20 20 20 20 20 27 72 65 6C 6F 61 64 27 20 3D 3E 20 31 2C 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 5F 5F 28 27 46 6C 75 73 68 20 74 68 65 20 74 61 62 6C 65 20 28 46 4C 55 53 48 29 27 29 2C 0A 20 20 20 20 20 20 20 20 24 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 27 46 4C 55 53 48 27 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 6D 61 69 6E 74 61 69 6E 20 61 63 74 69 6F 6E 20 48 54 4D 4C 20 6C 69 6E 6B 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 61 63 74 69 6F 6E 20 20 20 20 20 61 63 74 69 6F 6E 20 6E 61 6D 65 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 24 70 61 72 61 6D 73 20 20 20 20 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 73 20 61 72 72 61 79 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 20 61 64 64 69 74 69 6F 6E 61 6C 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 73 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 6C 69 6E 6B 20 20 20 20 20 20 20 63 6F 6E 74 61 69 6E 73 20 6E 61 6D 65 20 6F 66 20 70 61 67 65 2F 61 6E 63 68 6F 72 20 74 68 61 74 20 69 73 20 62 65 69 6E 67 20 6C 69 6E 6B 65 64 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 4D 61 69 6E 74 61 69 6E 41 63 74 69 6F 6E 6C 69 6E 6B 28 24 61 63 74 69 6F 6E 2C 20 24 70 61 72 61 6D 73 2C 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 20 24 6C 69 6E 6B 29 0A 7B 0A 20 20 20 20 72 65 74 75 72 6E 20 27 3C 6C 69 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 61 20 63 6C 61 73 73 3D 22 6D 61 69 6E 74 61 69 6E 5F 61 63 74 69 6F 6E 20 61 6A 61 78 22 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 68 72 65 66 3D 22 73 71 6C 2E 70 68 70 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 43 6F 6D 6D 6F 6E 28 61 72 72 61 79 5F 6D 65 72 67 65 28 24 75 72 6C 5F 70 61 72 61 6D 73 2C 20 24 70 61 72 61 6D 73 29 29 20 2E 20 27 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 24 61 63 74 69 6F 6E 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 61 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 4D 79 53 51 4C 44 6F 63 75 28 24 6C 69 6E 6B 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 69 3E 27 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 66 6F 72 20 44 65 6C 65 74 65 20 64 61 74 61 20 6F 72 20 74 61 62 6C 65 20 28 74 72 75 6E 63 61 74 65 20 74 61 62 6C 65 2C 20 64 72 6F 70 20 74 61 62 6C 65 29 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 74 72 75 6E 63 61 74 65 5F 74 61 62 6C 65 5F 75 72 6C 5F 70 61 72 61 6D 73 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 20 61 72 72 61 79 20 66 6F 72 20 74 72 75 6E 63 61 74 65 20 74 61 62 6C 65 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 64 72 6F 70 54 61 62 6C 65 55 72 6C 50 61 72 61 6D 73 20 20 20 20 20 20 20 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 20 61 72 72 61 79 20 66 6F 72 20 64 72 6F 70 20 74 61 62 6C 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 44 65 6C 65 74 65 44 61 74 61 4F 72 54 61 62 6C 65 28 0A 20 20 20 20 24 74 72 75 6E 63 61 74 65 5F 74 61 62 6C 65 5F 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 24 64 72 6F 70 54 61 62 6C 65 55 72 6C 50 61 72 61 6D 73 0A 29 20 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 63 61 75 74 69 6F 6E 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 44 65 6C 65 74 65 20 64 61 74 61 20 6F 72 20 74 61 62 6C 65 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 75 6C 3E 27 3B 0A 0A 20 20 20 20 69 66 20 28 21 20 65 6D 70 74 79 28 24 74 72 75 6E 63 61 74 65 5F 74 61 62 6C 65 5F 75 72 6C 5F 70 61 72 61 6D 73 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 44 65 6C 65 74 65 44 61 74 61 4F 72 54 61 62 6C 65 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 75 6E 63 61 74 65 5F 74 61 62 6C 65 5F 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 54 52 55 4E 43 41 54 45 5F 54 41 42 4C 45 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 45 6D 70 74 79 20 74 68 65 20 74 61 62 6C 65 20 28 54 52 55 4E 43 41 54 45 29 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 74 72 75 6E 63 61 74 65 5F 74 62 6C 5F 61 6E 63 68 6F 72 27 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 69 66 20 28 21 65 6D 70 74 79 20 28 24 64 72 6F 70 54 61 62 6C 65 55 72 6C 50 61 72 61 6D 73 29 29 20 7B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 67 65 74 44 65 6C 65 74 65 44 61 74 61 4F 72 54 61 62 6C 65 6C 69 6E 6B 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 64 72 6F 70 54 61 62 6C 65 55 72 6C 50 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 44 52 4F 50 5F 54 41 42 4C 45 27 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 5F 28 27 44 65 6C 65 74 65 20 74 68 65 20 74 61 62 6C 65 20 28 44 52 4F 50 29 27 29 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 64 72 6F 70 5F 74 62 6C 5F 61 6E 63 68 6F 72 27 0A 20 20 20 20 20 20 20 20 29 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 75 6C 3E 3C 2F 66 69 65 6C 64 73 65 74 3E 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 68 65 20 48 54 4D 4C 20 6C 69 6E 6B 20 66 6F 72 20 54 72 75 6E 63 61 74 65 20 74 61 62 6C 65 2C 20 44 72 6F 70 20 74 61 62 6C 65 20 61 6E 64 20 44 72 6F 70 20 64 62 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 20 61 72 72 61 79 20 66 6F 72 20 64 65 6C 65 74 65 20 64 61 74 61 20 6F 72 20 74 61 62 6C 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 73 79 6E 74 61 78 20 20 20 20 20 54 52 55 4E 43 41 54 45 5F 54 41 42 4C 45 20 6F 72 20 44 52 4F 50 5F 54 41 42 4C 45 20 6F 72 20 44 52 4F 50 5F 44 41 54 41 42 41 53 45 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 6C 69 6E 6B 20 20 20 20 20 20 20 6C 69 6E 6B 20 74 6F 20 62 65 20 73 68 6F 77 6E 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 49 64 20 20 20 20 20 69 64 20 6F 66 20 74 68 65 20 6C 69 6E 6B 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 53 74 72 69 6E 67 20 68 74 6D 6C 20 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 44 65 6C 65 74 65 44 61 74 61 4F 72 54 61 62 6C 65 6C 69 6E 6B 28 24 75 72 6C 5F 70 61 72 61 6D 73 2C 20 24 73 79 6E 74 61 78 2C 20 24 6C 69 6E 6B 2C 20 24 68 74 6D 6C 49 64 29 0A 7B 0A 20 20 20 20 72 65 74 75 72 6E 20 20 27 3C 6C 69 3E 3C 61 20 27 0A 20 20 20 20 20 20 20 20 2E 20 27 68 72 65 66 3D 22 73 71 6C 2E 70 68 70 27 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 43 6F 6D 6D 6F 6E 28 24 75 72 6C 5F 70 61 72 61 6D 73 29 20 2E 20 27 22 27 0A 20 20 20 20 20 20 20 20 2E 20 27 20 69 64 3D 22 27 20 2E 20 24 68 74 6D 6C 49 64 20 2E 20 27 22 20 63 6C 61 73 73 3D 22 61 6A 61 78 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 24 6C 69 6E 6B 20 2E 20 27 3C 2F 61 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 4D 79 53 51 4C 44 6F 63 75 28 24 73 79 6E 74 61 78 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 6C 69 3E 27 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 48 54 4D 4C 20 73 6E 69 70 70 65 74 20 66 6F 72 20 70 61 72 74 69 74 69 6F 6E 20 6D 61 69 6E 74 65 6E 61 6E 63 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 70 61 72 74 69 74 69 6F 6E 5F 6E 61 6D 65 73 20 61 72 72 61 79 20 6F 66 20 70 61 72 74 69 74 69 6F 6E 20 6E 61 6D 65 73 20 66 6F 72 20 61 20 73 70 65 63 69 66 69 63 20 64 62 2F 74 61 62 6C 65 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 75 72 6C 5F 70 61 72 61 6D 73 20 20 20 20 20 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 73 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 50 61 72 74 69 74 69 6F 6E 4D 61 69 6E 74 65 6E 61 6E 63 65 28 24 70 61 72 74 69 74 69 6F 6E 5F 6E 61 6D 65 73 2C 20 24 75 72 6C 5F 70 61 72 61 6D 73 29 0A 7B 0A 20 20 20 20 24 63 68 6F 69 63 65 73 20 3D 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 27 41 4E 41 4C 59 5A 45 27 20 3D 3E 20 5F 5F 28 27 41 6E 61 6C 79 7A 65 27 29 2C 0A 20 20 20 20 20 20 20 20 27 43 48 45 43 4B 27 20 3D 3E 20 5F 5F 28 27 43 68 65 63 6B 27 29 2C 0A 20 20 20 20 20 20 20 20 27 4F 50 54 49 4D 49 5A 45 27 20 3D 3E 20 5F 5F 28 27 4F 70 74 69 6D 69 7A 65 27 29 2C 0A 20 20 20 20 20 20 20 20 27 52 45 42 55 49 4C 44 27 20 3D 3E 20 5F 5F 28 27 52 65 62 75 69 6C 64 27 29 2C 0A 20 20 20 20 20 20 20 20 27 52 45 50 41 49 52 27 20 3D 3E 20 5F 5F 28 27 52 65 70 61 69 72 27 29 0A 20 20 20 20 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 6F 72 6D 20 6D 65 74 68 6F 64 3D 22 70 6F 73 74 22 20 61 63 74 69 6F 6E 3D 22 74 62 6C 5F 6F 70 65 72 61 74 69 6F 6E 73 2E 70 68 70 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 48 69 64 64 65 6E 49 6E 70 75 74 73 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 27 5D 2C 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 50 61 72 74 69 74 69 6F 6E 20 6D 61 69 6E 74 65 6E 61 6E 63 65 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 73 65 6C 65 63 74 20 3D 20 27 3C 73 65 6C 65 63 74 20 6E 61 6D 65 3D 22 70 61 72 74 69 74 69 6F 6E 5F 6E 61 6D 65 22 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 70 61 72 74 69 74 69 6F 6E 5F 6E 61 6D 65 73 20 61 73 20 24 6F 6E 65 5F 70 61 72 74 69 74 69 6F 6E 29 20 7B 0A 20 20 20 20 20 20 20 20 24 6F 6E 65 5F 70 61 72 74 69 74 69 6F 6E 20 3D 20 68 74 6D 6C 73 70 65 63 69 61 6C 63 68 61 72 73 28 24 6F 6E 65 5F 70 61 72 74 69 74 69 6F 6E 29 3B 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 73 65 6C 65 63 74 20 2E 3D 20 27 3C 6F 70 74 69 6F 6E 20 76 61 6C 75 65 3D 22 27 20 2E 20 24 6F 6E 65 5F 70 61 72 74 69 74 69 6F 6E 20 2E 20 27 22 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 24 6F 6E 65 5F 70 61 72 74 69 74 69 6F 6E 20 2E 20 27 3C 2F 6F 70 74 69 6F 6E 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 68 74 6D 6C 5F 73 65 6C 65 63 74 20 2E 3D 20 27 3C 2F 73 65 6C 65 63 74 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 73 70 72 69 6E 74 66 28 5F 5F 28 27 50 61 72 74 69 74 69 6F 6E 20 25 73 27 29 2C 20 24 68 74 6D 6C 5F 73 65 6C 65 63 74 29 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 67 65 74 52 61 64 69 6F 46 69 65 6C 64 73 28 0A 20 20 20 20 20 20 20 20 27 70 61 72 74 69 74 69 6F 6E 5F 6F 70 65 72 61 74 69 6F 6E 27 2C 20 24 63 68 6F 69 63 65 73 2C 20 27 27 2C 20 66 61 6C 73 65 0A 20 20 20 20 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 68 6F 77 4D 79 53 51 4C 44 6F 63 75 28 27 70 61 72 74 69 74 69 6F 6E 69 6E 67 5F 6D 61 69 6E 74 65 6E 61 6E 63 65 27 29 3B 0A 20 20 20 20 24 74 68 69 73 5F 75 72 6C 5F 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 5F 6D 65 72 67 65 28 0A 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 27 41 4C 54 45 52 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 52 45 4D 4F 56 45 20 50 41 52 54 49 54 49 4F 4E 49 4E 47 3B 27 0A 20 20 20 20 20 20 20 20 29 0A 20 20 20 20 29 3B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 62 72 20 2F 3E 3C 61 20 68 72 65 66 3D 22 73 71 6C 2E 70 68 70 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 43 6F 6D 6D 6F 6E 28 24 74 68 69 73 5F 75 72 6C 5F 70 61 72 61 6D 73 29 20 2E 20 27 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 5F 5F 28 27 52 65 6D 6F 76 65 20 70 61 72 74 69 74 69 6F 6E 69 6E 67 27 29 20 2E 20 27 3C 2F 61 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 20 63 6C 61 73 73 3D 22 74 62 6C 46 6F 6F 74 65 72 73 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 68 69 64 64 65 6E 22 20 6E 61 6D 65 3D 22 73 75 62 6D 69 74 5F 70 61 72 74 69 74 69 6F 6E 22 20 76 61 6C 75 65 3D 22 31 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 69 6E 70 75 74 20 74 79 70 65 3D 22 73 75 62 6D 69 74 22 20 76 61 6C 75 65 3D 22 27 20 2E 20 5F 5F 28 27 47 6F 27 29 20 2E 20 27 22 20 2F 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 66 6F 72 6D 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 68 65 20 48 54 4D 4C 20 66 6F 72 20 52 65 66 65 72 65 6E 74 69 61 6C 20 49 6E 74 65 67 72 69 74 79 20 63 68 65 63 6B 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 66 6F 72 65 69 67 6E 20 20 20 20 61 6C 6C 20 52 65 6C 61 74 69 6F 6E 73 20 74 6F 20 66 6F 72 65 69 67 6E 20 74 61 62 6C 65 73 20 66 6F 72 20 61 20 67 69 76 65 6E 20 74 61 62 6C 65 0A 20 2A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6F 72 20 6F 70 74 69 6F 6E 61 6C 6C 79 20 61 20 67 69 76 65 6E 20 63 6F 6C 75 6D 6E 20 69 6E 20 61 20 74 61 62 6C 65 0A 20 2A 20 40 70 61 72 61 6D 20 61 72 72 61 79 20 24 75 72 6C 5F 70 61 72 61 6D 73 20 61 72 72 61 79 20 6F 66 20 75 72 6C 20 70 61 72 61 6D 65 74 65 72 73 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 73 74 72 69 6E 67 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 48 74 6D 6C 46 6F 72 52 65 66 65 72 65 6E 74 69 61 6C 49 6E 74 65 67 72 69 74 79 43 68 65 63 6B 28 24 66 6F 72 65 69 67 6E 2C 20 24 75 72 6C 5F 70 61 72 61 6D 73 29 0A 7B 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 3D 20 27 3C 64 69 76 20 63 6C 61 73 73 3D 22 6F 70 65 72 61 74 69 6F 6E 73 5F 68 61 6C 66 5F 77 69 64 74 68 22 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 66 69 65 6C 64 73 65 74 3E 27 0A 20 20 20 20 20 20 20 20 2E 20 27 3C 6C 65 67 65 6E 64 3E 27 20 2E 20 5F 5F 28 27 43 68 65 63 6B 20 72 65 66 65 72 65 6E 74 69 61 6C 20 69 6E 74 65 67 72 69 74 79 3A 27 29 20 2E 20 27 3C 2F 6C 65 67 65 6E 64 3E 27 3B 0A 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 75 6C 3E 27 3B 0A 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 66 6F 72 65 69 67 6E 20 61 73 20 24 6D 61 73 74 65 72 20 3D 3E 20 24 61 72 72 29 20 7B 0A 20 20 20 20 20 20 20 20 24 6A 6F 69 6E 5F 71 75 65 72 79 20 20 3D 20 27 53 45 4C 45 43 54 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 2E 20 27 2E 2A 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 46 52 4F 4D 20 27 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 4C 45 46 54 20 4A 4F 49 4E 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 64 62 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 27 5D 29 3B 0A 20 20 20 20 20 20 20 20 69 66 20 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 27 5D 20 3D 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 20 2E 20 27 31 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 6A 6F 69 6E 5F 71 75 65 72 79 20 2E 3D 20 27 20 41 53 20 27 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 29 3B 0A 20 20 20 20 20 20 20 20 7D 20 65 6C 73 65 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 20 3D 20 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 27 5D 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 24 6A 6F 69 6E 5F 71 75 65 72 79 20 2E 3D 20 27 20 4F 4E 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 6D 61 73 74 65 72 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 3D 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 64 62 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 29 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 66 69 65 6C 64 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 57 48 45 52 45 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 64 62 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 29 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 66 69 65 6C 64 27 5D 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 49 53 20 4E 55 4C 4C 20 41 4E 44 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 6D 61 73 74 65 72 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 49 53 20 4E 4F 54 20 4E 55 4C 4C 27 3B 0A 20 20 20 20 20 20 20 20 24 74 68 69 73 5F 75 72 6C 5F 70 61 72 61 6D 73 20 3D 20 61 72 72 61 79 5F 6D 65 72 67 65 28 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 75 72 6C 5F 70 61 72 61 6D 73 2C 0A 20 20 20 20 20 20 20 20 20 20 20 20 61 72 72 61 79 28 27 73 71 6C 5F 71 75 65 72 79 27 20 3D 3E 20 24 6A 6F 69 6E 5F 71 75 65 72 79 29 0A 20 20 20 20 20 20 20 20 29 3B 0A 0A 20 20 20 20 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 6C 69 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 61 20 68 72 65 66 3D 22 73 71 6C 2E 70 68 70 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 52 4C 5F 67 65 74 43 6F 6D 6D 6F 6E 28 24 74 68 69 73 5F 75 72 6C 5F 70 61 72 61 6D 73 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 22 3E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 24 6D 61 73 74 65 72 20 2E 20 27 26 6E 62 73 70 3B 2D 3E 26 6E 62 73 70 3B 27 20 2E 20 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 64 62 27 5D 20 2E 20 27 2E 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 74 61 62 6C 65 27 5D 20 2E 20 27 2E 27 20 2E 20 24 61 72 72 5B 27 66 6F 72 65 69 67 6E 5F 66 69 65 6C 64 27 5D 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 3C 2F 61 3E 3C 2F 6C 69 3E 27 20 2E 20 22 5C 6E 22 3B 0A 20 20 20 20 7D 20 2F 2F 20 20 66 6F 72 65 61 63 68 20 24 66 6F 72 65 69 67 6E 0A 20 20 20 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 20 2E 3D 20 27 3C 2F 75 6C 3E 3C 2F 66 69 65 6C 64 73 65 74 3E 3C 2F 64 69 76 3E 27 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 68 74 6D 6C 5F 6F 75 74 70 75 74 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 52 65 6F 72 64 65 72 20 74 61 62 6C 65 20 62 61 73 65 64 20 6F 6E 20 72 65 71 75 65 73 74 20 70 61 72 61 6D 73 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 53 51 4C 20 71 75 65 72 79 20 61 6E 64 20 72 65 73 75 6C 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 51 75 65 72 79 41 6E 64 52 65 73 75 6C 74 46 6F 72 52 65 6F 72 64 65 72 69 6E 67 54 61 62 6C 65 28 29 0A 7B 0A 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 3D 20 27 41 4C 54 45 52 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 0A 20 20 20 20 20 20 20 20 2E 20 27 20 4F 52 44 45 52 20 42 59 20 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 75 72 6C 64 65 63 6F 64 65 28 24 5F 52 45 51 55 45 53 54 5B 27 6F 72 64 65 72 5F 66 69 65 6C 64 27 5D 29 29 3B 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 6F 72 64 65 72 5F 6F 72 64 65 72 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 6F 72 64 65 72 5F 6F 72 64 65 72 27 5D 20 3D 3D 3D 20 27 64 65 73 63 27 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 2E 3D 20 27 20 44 45 53 43 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 2E 3D 20 27 3B 27 3B 0A 20 20 20 20 24 72 65 73 75 6C 74 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 73 71 6C 5F 71 75 65 72 79 29 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 61 72 72 61 79 28 24 73 71 6C 5F 71 75 65 72 79 2C 20 24 72 65 73 75 6C 74 29 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 74 61 62 6C 65 20 61 6C 74 65 72 73 20 61 72 72 61 79 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 20 20 77 68 65 74 68 65 72 20 4D 59 49 53 41 4D 20 7C 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 73 61 6D 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 49 53 41 4D 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 70 61 63 6B 5F 6B 65 79 73 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6B 20 6B 65 79 73 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 63 68 65 63 6B 73 75 6D 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 63 68 65 63 6B 73 75 6D 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 61 72 69 61 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 41 52 49 41 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 20 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 70 61 67 65 20 63 68 65 63 6B 73 75 6D 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 20 20 20 20 20 64 65 6C 61 79 20 6B 65 79 20 77 72 69 74 65 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 69 6E 6E 6F 64 62 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 49 4E 4E 4F 44 42 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 62 6F 6F 6C 65 61 6E 20 24 69 73 5F 70 62 78 74 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 74 68 65 72 20 50 42 58 54 20 6F 72 20 6E 6F 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 72 6F 77 5F 66 6F 72 6D 61 74 20 20 20 20 20 20 20 20 20 20 72 6F 77 20 66 6F 72 6D 61 74 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 6E 65 77 54 62 6C 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 20 74 61 62 6C 65 20 73 74 6F 72 61 67 65 20 65 6E 67 69 6E 65 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 20 20 20 20 20 20 20 76 61 6C 75 65 20 6F 66 20 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 20 20 20 20 20 20 20 63 6F 6C 6C 61 74 69 6F 6E 20 6F 66 20 74 68 65 20 74 61 62 6C 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 54 61 62 6C 65 41 6C 74 65 72 73 41 72 72 61 79 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 73 61 6D 2C 20 24 70 61 63 6B 5F 6B 65 79 73 2C 0A 20 20 20 20 24 63 68 65 63 6B 73 75 6D 2C 20 24 69 73 5F 61 72 69 61 2C 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 2C 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 0A 20 20 20 20 24 69 73 5F 70 62 78 74 2C 20 24 72 6F 77 5F 66 6F 72 6D 61 74 2C 20 24 6E 65 77 54 62 6C 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 2C 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 2C 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 0A 29 20 7B 0A 20 20 20 20 67 6C 6F 62 61 6C 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 3B 0A 0A 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 20 3D 20 61 72 72 61 79 28 29 3B 0A 0A 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 63 6F 6D 6D 65 6E 74 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 75 72 6C 64 65 63 6F 64 65 28 24 5F 52 45 51 55 45 53 54 5B 27 70 72 65 76 5F 63 6F 6D 6D 65 6E 74 27 5D 29 20 21 3D 3D 20 24 5F 52 45 51 55 45 53 54 5B 27 63 6F 6D 6D 65 6E 74 27 5D 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 43 4F 4D 4D 45 4E 54 20 3D 20 5C 27 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 71 6C 41 64 64 53 6C 61 73 68 65 73 28 24 5F 52 45 51 55 45 53 54 5B 27 63 6F 6D 6D 65 6E 74 27 5D 29 20 2E 20 27 5C 27 27 3B 0A 20 20 20 20 7D 0A 20 20 20 20 69 66 20 28 21 20 65 6D 70 74 79 28 24 6E 65 77 54 62 6C 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 29 0A 20 20 20 20 20 20 20 20 26 26 20 73 74 72 74 6F 6C 6F 77 65 72 28 24 6E 65 77 54 62 6C 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 29 20 21 3D 3D 20 73 74 72 74 6F 6C 6F 77 65 72 28 24 47 4C 4F 42 41 4C 53 5B 27 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 27 5D 29 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 45 4E 47 49 4E 45 20 3D 20 27 20 2E 20 24 6E 65 77 54 62 6C 53 74 6F 72 61 67 65 45 6E 67 69 6E 65 3B 0A 20 20 20 20 7D 0A 20 20 20 20 69 66 20 28 21 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 20 21 3D 3D 20 24 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 44 45 46 41 55 4C 54 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 67 65 6E 65 72 61 74 65 43 68 61 72 73 65 74 51 75 65 72 79 50 61 72 74 28 24 5F 52 45 51 55 45 53 54 5B 27 74 62 6C 5F 63 6F 6C 6C 61 74 69 6F 6E 27 5D 29 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 69 66 20 28 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 73 61 6D 29 0A 20 20 20 20 20 20 20 20 26 26 20 69 73 73 65 74 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 63 6B 5F 6B 65 79 73 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 63 6B 5F 6B 65 79 73 27 5D 20 21 3D 20 28 73 74 72 69 6E 67 29 24 70 61 63 6B 5F 6B 65 79 73 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 70 61 63 6B 5F 6B 65 79 73 20 3D 20 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 63 6B 5F 6B 65 79 73 27 5D 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 63 68 65 63 6B 73 75 6D 27 5D 20 3D 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 63 68 65 63 6B 73 75 6D 27 5D 29 20 3F 20 27 30 27 20 3A 20 27 31 27 3B 0A 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 63 68 65 63 6B 73 75 6D 27 5D 20 21 3D 3D 20 24 63 68 65 63 6B 73 75 6D 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 63 68 65 63 6B 73 75 6D 20 3D 20 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 63 68 65 63 6B 73 75 6D 27 5D 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 27 5D 0A 20 20 20 20 20 20 20 20 3D 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 27 5D 29 20 3F 20 27 30 27 20 3A 20 27 31 27 3B 0A 20 20 20 20 69 66 20 28 24 69 73 5F 61 72 69 61 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 27 5D 20 21 3D 3D 20 24 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 54 52 41 4E 53 41 43 54 49 4F 4E 41 4C 20 3D 20 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 74 72 61 6E 73 61 63 74 69 6F 6E 61 6C 27 5D 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 27 5D 0A 20 20 20 20 20 20 20 20 3D 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 27 5D 29 20 3F 20 27 30 27 20 3A 20 27 31 27 3B 0A 20 20 20 20 69 66 20 28 24 69 73 5F 61 72 69 61 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 27 5D 20 21 3D 3D 20 24 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 50 41 47 45 5F 43 48 45 43 4B 53 55 4D 20 3D 20 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 70 61 67 65 5F 63 68 65 63 6B 73 75 6D 27 5D 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 27 5D 0A 20 20 20 20 20 20 20 20 3D 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 27 5D 29 20 3F 20 27 30 27 20 3A 20 27 31 27 3B 0A 20 20 20 20 69 66 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 0A 20 20 20 20 20 20 20 20 26 26 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 27 5D 20 21 3D 3D 20 24 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 20 3D 20 27 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 64 65 6C 61 79 5F 6B 65 79 5F 77 72 69 74 65 27 5D 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 69 66 20 28 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 6E 6E 6F 64 62 20 7C 7C 20 24 69 73 5F 70 62 78 74 29 0A 20 20 20 20 20 20 20 20 26 26 20 21 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 28 21 20 69 73 73 65 74 28 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 29 0A 20 20 20 20 20 20 20 20 7C 7C 20 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 27 5D 20 21 3D 3D 20 24 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 29 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 20 3D 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 71 6C 41 64 64 53 6C 61 73 68 65 73 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 61 75 74 6F 5F 69 6E 63 72 65 6D 65 6E 74 27 5D 29 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 69 66 20 28 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 7C 7C 20 24 69 73 5F 69 6E 6E 6F 64 62 20 7C 7C 20 24 69 73 5F 70 62 78 74 29 0A 20 20 20 20 20 20 20 20 26 26 20 20 21 20 65 6D 70 74 79 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 72 6F 77 5F 66 6F 72 6D 61 74 27 5D 29 0A 20 20 20 20 20 20 20 20 26 26 20 28 21 73 74 72 6C 65 6E 28 24 72 6F 77 5F 66 6F 72 6D 61 74 29 0A 20 20 20 20 20 20 20 20 7C 7C 20 73 74 72 74 6F 6C 6F 77 65 72 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 72 6F 77 5F 66 6F 72 6D 61 74 27 5D 29 20 21 3D 3D 20 73 74 72 74 6F 6C 6F 77 65 72 28 24 72 6F 77 5F 66 6F 72 6D 61 74 29 29 0A 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 5B 5D 20 3D 20 27 52 4F 57 5F 46 4F 52 4D 41 54 20 3D 20 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 73 71 6C 41 64 64 53 6C 61 73 68 65 73 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 72 6F 77 5F 66 6F 72 6D 61 74 27 5D 29 3B 0A 20 20 20 20 7D 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 24 74 61 62 6C 65 5F 61 6C 74 65 72 73 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 73 65 74 20 69 6E 69 74 69 61 6C 20 76 61 6C 75 65 20 6F 66 20 74 68 65 20 73 65 74 20 6F 66 20 76 61 72 69 61 62 6C 65 73 2C 20 62 61 73 65 64 20 6F 6E 20 74 68 65 20 63 75 72 72 65 6E 74 20 74 61 62 6C 65 20 65 6E 67 69 6E 65 0A 20 2A 0A 20 2A 20 40 70 61 72 61 6D 20 73 74 72 69 6E 67 20 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 20 74 61 62 6C 65 20 73 74 6F 72 61 67 65 20 65 6E 67 69 6E 65 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 28 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 69 73 5F 69 73 61 6D 2C 0A 20 2A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 2C 20 24 69 73 5F 61 72 69 61 2C 20 24 69 73 5F 70 62 78 74 29 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 73 65 74 47 6C 6F 62 61 6C 56 61 72 69 61 62 6C 65 73 46 6F 72 45 6E 67 69 6E 65 28 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 29 0A 7B 0A 20 20 20 20 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 20 73 74 72 74 6F 75 70 70 65 72 28 24 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 29 3B 0A 0A 20 20 20 20 2F 2F 4F 70 74 69 6F 6E 73 20 74 68 61 74 20 61 70 70 6C 79 20 74 6F 20 4D 59 49 53 41 4D 20 75 73 75 61 6C 6C 79 20 61 70 70 6C 79 20 74 6F 20 41 52 49 41 0A 20 20 20 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 20 3D 20 28 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 4D 59 49 53 41 4D 27 0A 20 20 20 20 20 20 20 20 7C 7C 20 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 41 52 49 41 27 0A 20 20 20 20 20 20 20 20 7C 7C 20 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 4D 41 52 49 41 27 0A 20 20 20 20 29 3B 0A 20 20 20 20 24 69 73 5F 61 72 69 61 20 3D 20 28 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 41 52 49 41 27 29 3B 0A 0A 20 20 20 20 24 69 73 5F 69 73 61 6D 20 3D 20 28 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 49 53 41 4D 27 29 3B 0A 20 20 20 20 24 69 73 5F 69 6E 6E 6F 64 62 20 3D 20 28 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 49 4E 4E 4F 44 42 27 29 3B 0A 20 20 20 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 20 3D 20 28 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 42 45 52 4B 45 4C 45 59 44 42 27 29 3B 0A 20 20 20 20 24 69 73 5F 70 62 78 74 20 3D 20 28 24 75 70 70 65 72 54 62 6C 53 74 6F 72 45 6E 67 69 6E 65 20 3D 3D 20 27 50 42 58 54 27 29 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 61 72 72 61 79 28 0A 20 20 20 20 20 20 20 20 24 69 73 5F 6D 79 69 73 61 6D 5F 6F 72 5F 61 72 69 61 2C 20 24 69 73 5F 69 6E 6E 6F 64 62 2C 20 24 69 73 5F 69 73 61 6D 2C 0A 20 20 20 20 20 20 20 20 24 69 73 5F 62 65 72 6B 65 6C 65 79 64 62 2C 20 24 69 73 5F 61 72 69 61 2C 20 24 69 73 5F 70 62 78 74 0A 20 20 20 20 29 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 77 61 72 6E 69 6E 67 20 6D 65 73 73 61 67 65 73 20 61 72 72 61 79 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 20 24 77 61 72 6E 69 6E 67 5F 6D 65 73 73 61 67 65 73 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 57 61 72 6E 69 6E 67 4D 65 73 73 61 67 65 73 41 72 72 61 79 28 29 0A 7B 0A 20 20 20 20 24 77 61 72 6E 69 6E 67 5F 6D 65 73 73 61 67 65 73 20 3D 20 61 72 72 61 79 28 29 3B 0A 20 20 20 20 66 6F 72 65 61 63 68 20 28 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 67 65 74 57 61 72 6E 69 6E 67 73 28 29 20 61 73 20 24 77 61 72 6E 69 6E 67 29 20 7B 0A 20 20 20 20 20 20 20 20 2F 2F 20 49 6E 20 4D 61 72 69 61 44 42 20 35 2E 31 2E 34 34 2C 20 77 68 65 6E 20 61 6C 74 65 72 69 6E 67 20 61 20 74 61 62 6C 65 20 66 72 6F 6D 20 4D 61 72 69 61 20 74 6F 20 4D 79 49 53 41 4D 0A 20 20 20 20 20 20 20 20 2F 2F 20 61 6E 64 20 69 66 20 54 52 41 4E 53 41 43 54 49 4F 4E 41 4C 20 77 61 73 20 73 65 74 2C 20 74 68 65 20 73 79 73 74 65 6D 20 72 65 70 6F 72 74 73 20 61 6E 20 65 72 72 6F 72 3B 0A 20 20 20 20 20 20 20 20 2F 2F 20 49 20 64 69 73 63 75 73 73 65 64 20 77 69 74 68 20 61 20 4D 61 72 69 61 20 64 65 76 65 6C 6F 70 65 72 20 61 6E 64 20 68 65 20 61 67 72 65 65 73 20 74 68 61 74 20 74 68 69 73 0A 20 20 20 20 20 20 20 20 2F 2F 20 73 68 6F 75 6C 64 20 6E 6F 74 20 62 65 20 72 65 70 6F 72 74 65 64 20 77 69 74 68 20 61 20 4C 65 76 65 6C 20 6F 66 20 45 72 72 6F 72 2C 20 73 6F 20 68 65 72 65 0A 20 20 20 20 20 20 20 20 2F 2F 20 49 20 6A 75 73 74 20 69 67 6E 6F 72 65 20 69 74 2E 20 42 75 74 20 74 68 65 72 65 20 61 72 65 20 6F 74 68 65 72 20 31 34 37 38 20 6D 65 73 73 61 67 65 73 0A 20 20 20 20 20 20 20 20 2F 2F 20 74 68 61 74 20 69 74 27 73 20 62 65 74 74 65 72 20 74 6F 20 73 68 6F 77 2E 0A 20 20 20 20 20 20 20 20 69 66 20 28 21 20 28 24 5F 52 45 51 55 45 53 54 5B 27 6E 65 77 5F 74 62 6C 5F 73 74 6F 72 61 67 65 5F 65 6E 67 69 6E 65 27 5D 20 3D 3D 20 27 4D 79 49 53 41 4D 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 24 77 61 72 6E 69 6E 67 5B 27 43 6F 64 65 27 5D 20 3D 3D 20 27 31 34 37 38 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 24 77 61 72 6E 69 6E 67 5B 27 4C 65 76 65 6C 27 5D 20 3D 3D 20 27 45 72 72 6F 72 27 29 0A 20 20 20 20 20 20 20 20 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 24 77 61 72 6E 69 6E 67 5F 6D 65 73 73 61 67 65 73 5B 5D 20 3D 20 24 77 61 72 6E 69 6E 67 5B 27 4C 65 76 65 6C 27 5D 20 2E 20 27 3A 20 23 27 20 2E 20 24 77 61 72 6E 69 6E 67 5B 27 43 6F 64 65 27 5D 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2E 20 27 20 27 20 2E 20 24 77 61 72 6E 69 6E 67 5B 27 4D 65 73 73 61 67 65 27 5D 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 7D 0A 20 20 20 20 72 65 74 75 72 6E 20 24 77 61 72 6E 69 6E 67 5F 6D 65 73 73 61 67 65 73 3B 0A 7D 0A 0A 2F 2A 2A 0A 20 2A 20 47 65 74 20 53 51 4C 20 71 75 65 72 79 20 61 6E 64 20 72 65 73 75 6C 74 20 61 66 74 65 72 20 72 61 6E 20 74 68 69 73 20 53 51 4C 20 71 75 65 72 79 20 66 6F 72 20 61 20 70 61 72 74 69 74 69 6F 6E 20 6F 70 65 72 61 74 69 6F 6E 0A 20 2A 20 68 61 73 20 62 65 65 6E 20 72 65 71 75 65 73 74 65 64 20 62 79 20 74 68 65 20 75 73 65 72 0A 20 2A 0A 20 2A 20 40 72 65 74 75 72 6E 20 61 72 72 61 79 20 24 73 71 6C 5F 71 75 65 72 79 2C 20 24 72 65 73 75 6C 74 0A 20 2A 2F 0A 66 75 6E 63 74 69 6F 6E 20 50 4D 41 5F 67 65 74 51 75 65 72 79 41 6E 64 52 65 73 75 6C 74 46 6F 72 50 61 72 74 69 74 69 6F 6E 28 29 0A 7B 0A 20 20 20 20 24 73 71 6C 5F 71 75 65 72 79 20 3D 20 27 41 4C 54 45 52 20 54 41 42 4C 45 20 27 0A 20 20 20 20 20 20 20 20 2E 20 50 4D 41 5F 55 74 69 6C 3A 3A 62 61 63 6B 71 75 6F 74 65 28 24 47 4C 4F 42 41 4C 53 5B 27 74 61 62 6C 65 27 5D 29 20 2E 20 27 20 27 0A 20 20 20 20 20 20 20 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 70 61 72 74 69 74 69 6F 6E 5F 6F 70 65 72 61 74 69 6F 6E 27 5D 0A 20 20 20 20 20 20 20 20 2E 20 27 20 50 41 52 54 49 54 49 4F 4E 20 27 0A 20 20 20 20 20 20 20 20 2E 20 24 5F 52 45 51 55 45 53 54 5B 27 70 61 72 74 69 74 69 6F 6E 5F 6E 61 6D 65 27 5D 20 2E 20 27 3B 27 3B 0A 20 20 20 20 24 72 65 73 75 6C 74 20 3D 20 24 47 4C 4F 42 41 4C 53 5B 27 64 62 69 27 5D 2D 3E 71 75 65 72 79 28 24 73 71 6C 5F 71 75 65 72 79 29 3B 0A 0A 20 20 20 20 72 65 74 75 72 6E 20 61 72 72 61 79 28 24 73 71 6C 5F 71 75 65 72 79 2C 20 24 72 65 73 75 6C 74 29 3B 0A 7D 0A 0A 3F 3E 0A | <?php /* vim: set expan dtab sw=4 ts=4 sts=4: */ /** * set of functions with the operations sec tion in pma * * @packa ge PhpMyAdmin */ if (! defined('PHPMYADMIN')) { exit; } /** * Ge t HTML output for databa se comment * * @param string $db database name * * @return string $h tml_output */ function PMA_getHtmlForDatabaseCo mment($db) { $html_o utput = '<div class="ope rations_half_width">' . '<form method="p ost" action="db_operatio ns.php" id="formDatabase Comment">' . PMA _URL_getHiddenInputs($db ) . '<fieldset>' . '<legend>'; if (PMA_Util::showIco ns('ActionLinksMode')) { $html_output .= '<img class="icon ic_b_ comment" ' . 'src="themes/dot.gif" a lt="" />'; } $ht ml_output .= __('Databa se comment:'); $html _output .= '</legend>'; $html_output .= '<in put type="text" name="co mment" ' . 'clas s="textfield" size="30"' . 'value="' . h tmlspecialchars(PMA_getD BComment($db)) . '" />' . '</fieldset>'; $html_output .= '<f ieldset class="tblFooter s">' . '<input t ype="submit" value="' . __('Go') . '" />' . '</fieldset>' . '</form>' . '</div>'; return $h tml_output; } /** * Ge t HTML output for rename database * * @param s tring $db database name * * @return string $ht ml_output */ function P MA_getHtmlForRenameDatab ase($db) { $html_out put = '<div class="opera tions_half_width">' . '<form id="rename_ db_form" ' . 'cl ass="ajax" ' . ' method="post" action="db _operations.php" ' . 'onsubmit="return e mptyFormElements(this, \ 'newname\')">'; if ( isset($_REQUEST['db_coll ation'])) { $htm l_output .= '<input type ="hidden" name="db_colla tion" ' . 'v alue="' . $_REQUEST['db_ collation'] . '" />' . "\n"; } $html_output .= '<inp ut type="hidden" name="w hat" value="data" />' . '<input type="hi dden" name="db_rename" v alue="true" />' . PMA_URL_getHiddenInput s($db) . '<field set>' . '<legend >'; if (PMA_Util::s howIcons('ActionLinksMod e')) { $html_out put .= PMA_Util::getImag e('b_edit.png'); } $html_output .= __('R ename database to:') . '</legend>'; $html_output .= '<input id="new_db_name" type=" text" name="newname" ' . 'size="30" clas s="textfield" value="" r equired="required" />' . '</fieldset>' . '<fieldset clas s="tblFooters">' . '<input id="rename_db _input" type="submit" va lue="' . __('Go') . '" / >' . '</fieldset >' . '</form>' . '</div>'; return $html_output; } /** * Get HTML for data base drop link * * @pa ram string $db database name * * @return strin g $html_output */ funct ion PMA_getHtmlForDropDa tabaseLink($db) { $t his_sql_query = 'DROP DA TABASE ' . PMA_Util::bac kquote($db); $this_u rl_params = array( 'sql_query' => $this_ sql_query, 'back ' => 'db_operations.php' , 'goto' => 'ind ex.php', 'reload ' => '1', 'purge ' => '1', 'messa ge_to_show' => sprintf( __('Database %s has been dropped.'), htmlspecial chars(PMA_Util::backquot e($db)) ), 'db' => null, ); $html_output = '<di v class="operations_half _width">' . '<fi eldset class="caution">' ; $html_output .= '< legend>'; if (PMA_Ut il::showIcons('ActionLin ksMode')) { $htm l_output .= PMA_Util::ge tImage('b_deltbl.png'); } $html_output . = __('Remove database') . '</legend>'; $html_output .= '<ul> '; $html_output .= P MA_getDeleteDataOrTablel ink( $this_url_p arams, 'DROP_DAT ABASE', __('Drop the database (DROP)'), 'drop_db_anchor' ); $html_output .= '</ul></fieldset>' . '</div>'; return $html_output; } /** * Get HTML snippet for copy database * * @param string $db databa se name * * @return st ring $html_output */ fu nction PMA_getHtmlForCop yDatabase($db) { $dr op_clause = 'DROP TABLE / DROP VIEW'; $choic es = array( 'str ucture' => __('Structure only'), 'data' => __('Structure an d data'), 'datao nly' => __('Data only') ); if (isset($ _COOKIE) && isse t($_COOKIE['pma_switch_t o_new']) && $_CO OKIE['pma_switch_to_new' ] == 'true' ) { $pma_switch_to_new = 'true'; } $htm l_output = '<div class=" operations_half_width cl earfloat">'; $html_o utput .= '<form id="copy _db_form" ' . 'c lass="ajax" ' . 'method="post" action="d b_operations.php"' . 'onsubmit="return e mptyFormElements(this, \ 'newname\')">'; if (isset($_REQUEST['db_col lation'])) { $ht ml_output .= '<input typ e="hidden" name="db_coll ation" ' . 'valu e="' . $_REQUEST['db_col lation'] . '" />' . "\n" ; } $html_output .= '<input type="hidden " name="db_copy" value=" true" />' . "\n" . PMA_URL_getHiddenInpu ts($db); $html_outpu t .= '<fieldset>' . '<legend>'; if (PMA_Util::showIcons('Ac tionLinksMode')) { $html_output .= PMA_U til::getImage('b_edit.pn g'); } $html_out put .= __('Copy database to:') . '</lege nd>' . '<input t ype="text" name="newname " size="30" ' . 'class="textfield" value ="" required="required" /><br />' . PMA_ Util::getRadioFields( 'what', $choic es, 'data', true ); $html_output .= '<input type="checkbox" name="create_database_be fore_copying" ' . 'value="1" id="checkbo x_create_database_before _copying"' . 'ch ecked="checked" />'; $html_output .= '<label for="checkbox_create_da tabase_before_copying">' . __('CREATE DA TABASE before copying') . '</label><br />'; $html_output .= '<input type="checkbox" name="dr op_if_exists" value="tru e"' . 'id="check box_drop" />'; $html _output .= '<label for=" checkbox_drop">' . sprintf(__('Add %s'), $drop_clause) . '</label><br />'; $ html_output .= '<input t ype="checkbox" name="sql _auto_increment" value=" 1" ' . 'checked= "checked" id="checkbox_a uto_increment" />'; $html_output .= '<label for="checkbox_auto_incre ment">' . __('Ad d AUTO_INCREMENT value') . '</label><br />'; $html_output .= '<input type="checkbox" name="a dd_constraints" value="1 "' . 'id="checkb ox_constraints" />'; $html_output .= '<label for="checkbox_constrain ts">' . __('Add constraints') . '</label ><br />'; $html_outp ut .= '<input type="chec kbox" name="switch_to_ne w" value="true"' . 'id="checkbox_switch" ' . ((isset($pma _switch_to_new) && $pma_ switch_to_new == 'true') ? ' checked ="checked"' : '') . '/>'; $html_output .= '<labe l for="checkbox_switch"> ' . __('Switch t o copied database') . '< /label>' . '</fi eldset>'; $html_outp ut .= '<fieldset class=" tblFooters">' . '<input type="submit" na me="submit_copy" value=" ' . __('Go') . '" />' . '</fieldset>' . '</form>' . '</div>'; retur n $html_output; } /** * Get HTML snippet for c hange database charset * * @param string $db database name * @para m string $table tabel na me * * @return string $html_output */ functio n PMA_getHtmlForChangeDa tabaseCharset($db, $tabl e) { $html_output = '<div class="operations_ half_width">' . '<form id="change_db_cha rset_form" '; $html_ output .= 'class="ajax" '; $html_output .= ' method="post" action="db _operations.php">'; $html_output .= PMA_URL _getHiddenInputs($db, $t able); $html_output .= '<fieldset>' . "\n" . ' <legend>'; if (PMA_Util::showI cons('ActionLinksMode')) { $html_output .= PMA_Util::getImage('s _asci.png'); } $ html_output .= '<label f or="select_db_collation" >' . __('Collation') . ':</label>' . "\n " . '</legend>' . "\n" . PMA_gen erateCharsetDropdownBox( PMA_CSDROPD OWN_COLLATION, 'db_collation', 'select_db_collat ion', isset( $_REQUEST['db_collation' ]) ? $_REQUEST['db_colla tion'] : '', false, 3 ) . '</fie ldset>' . '<fiel dset class="tblFooters"> ' . '<input type ="submit" name="submitco llation"' . ' va lue="' . __('Go') . '" / >' . "\n" . '</f ieldset>' . "\n" . '</form></div>' . "\n "; return $html_out put; } /** * Get HTML snippet for export relat ional schema view * * @param string $url_query Query string for link * * @return string $htm l_output */ function PM A_getHtmlForExportRelati onalSchemaView($url_quer y) { $html_output = '<div class="operations_ full_width">' . '<fieldset><a href="sche ma_edit.php?' . $url_que ry . '">'; if (PMA_U til::showIcons('ActionLi nksMode')) { $ht ml_output .= PMA_Util::g etImage( 'b_ edit.png' ); } $html_output .= _ _('Edit or export relati onal schema') . '</a></fieldset>' . '</div>'; retur n $html_output; } /** * Run the Procedure defi nitions and function def initions * * to avoid selecting alternatively the current and new db * we would need to modif y the CREATE definitions to qualify * the db na me * * @param string $ db database name * * @ return void */ function PMA_runProcedureAndFunc tionDefinitions($db) { $procedure_names = $G LOBALS['dbi']->getProced uresOrFunctions($db, 'PR OCEDURE'); if ($proc edure_names) { f oreach ($procedure_names as $procedure_name) { $GLOBALS['dbi ']->selectDb($db); $tmp_query = $GLO BALS['dbi']->getDefiniti on( $db, 'PROCEDURE', $procedure _name ); // collect for later display $GLOBALS['sql_query'] .= "\n" . $tmp_query; $GLOBALS['dbi' ]->selectDb($_REQUEST['n ewname']); $ GLOBALS['dbi']->query($t mp_query); } } $function_names = $GLOBALS['dbi']->getPr oceduresOrFunctions($db, 'FUNCTION'); if ($f unction_names) { foreach ($function_name s as $function_name) { $GLOBALS['dbi ']->selectDb($db); $tmp_query = $GLO BALS['dbi']->getDefiniti on( $db, 'FUNCTION', $function_n ame ); // collect for la ter display $GLOBALS['sql_query'] .= "\n" . $tmp_query; $GLOBALS['dbi']- >selectDb($_REQUEST['new name']); $GL OBALS['dbi']->query($tmp _query); } } } /** * Get sql query and create database bef ore copy * * @return s tring $sql_query */ fun ction PMA_getSqlQueryAnd CreateDbBeforeCopy() { // lower_case_table_n ames=1 `DB` becomes `db` if (! PMA_DRIZZLE) { $lowerCaseTabl eNames = $GLOBALS['dbi'] ->fetchValue( 'SHOW VARIABLES LIKE " lower_case_table_names"' , 0, 1 ); if ($lowerCaseTableNam es === '1') { $_REQUEST['newname'] = $GLOBALS['PMA_String']- >strtolower( $_REQUEST['newname' ] ); } } $local_que ry = 'CREATE DATABASE IF NOT EXISTS ' . PMA_Util::backquote($_RE QUEST['newname']); i f (isset($_REQUEST['db_c ollation'])) { $ local_query .= ' DEFAULT ' . PMA_gene rateCharsetQueryPart($_R EQUEST['db_collation']); } $local_query .= ';'; $sql_query = $local_query; // sa ve the original db name because Tracker.class.ph p which // may be ca lled under $GLOBALS['dbi ']->query() changes $GLO BALS['db'] // for so me statements, one of wh ich being CREATE DATABAS E $original_db = $GL OBALS['db']; $GLOBAL S['dbi']->query($local_q uery); $GLOBALS['db' ] = $original_db; / / Set the SQL mode to NO _AUTO_VALUE_ON_ZERO to p revent MySQL from creati ng // export stateme nts it cannot import $sql_set_mode = "SET SQ L_MODE='NO_AUTO_VALUE_ON _ZERO'"; $GLOBALS['d bi']->query($sql_set_mod e); // rebuild the database list because PM A_Table::moveCopy // checks in this list if the target db exists $GLOBALS['pma']->databa ses->build(); retur n $sql_query; } /** * remove all foreign key c onstraints and return * sql constraints query f or full database * * @ param array $tables_ full array of all tables in given db or db s * @param ExportSql $e xport_sql_plugin export plugin instance * @para m boolean $move whether database name is empty or not * @param string $db database nam e * * @return string s ql constraints query for full databases */ func tion PMA_getSqlConstrain tsQueryForFullDb( $t ables_full, $export_sql_ plugin, $move, $db ) { global $sql_constrain ts, $sql_drop_foreign_ke ys; $sql_constraints _query_full_db = array() ; foreach ($tables_f ull as $each_table => $t mp) { /* Followi ng globals are set in ge tTableDef */ $sq l_constraints = ''; $sql_drop_foreign_ke ys = ''; $export _sql_plugin->getTableDef ( $db, $each _table, "\n", '', false, false, false, false ); if ($mov e && ! empty($sql_drop_f oreign_keys)) { $GLOBALS['dbi']->que ry($sql_drop_foreign_key s); } // keep the constraint we just dropped if (! empty($sql_constraint s)) { $sql_c onstraints_query_full_db [] = $sql_constraints; } } retur n $sql_constraints_query _full_db; } /** * Get views as an array and cr eate SQL view stand-in * * @param array $t ables_full array o f all tables in given db or dbs * @param Export Sql $export_sql_plugin e xport plugin instance * @param string $db database na me * * @return array $ views */ function PMA_g etViewsAndCreateSqlViewS tandIn( $tables_full , $export_sql_plugin, $d b ) { $views = array (); foreach ($tables _full as $each_table => $tmp) { // to be able to rename a db con taining views, / / first all the views ar e collected and a stand- in is created // the real views are crea ted after the tables if (PMA_Table::isVi ew($db, $each_table)) { $views[] = $ each_table; // Create stand-in defin ition to resolve view de pendencies $ sql_view_standin = $expo rt_sql_plugin->getTableD efStandIn( $db, $each_table, "\n " ); $GLOBALS['dbi']->se lectDb($_REQUEST['newnam e']); $GLOBA LS['dbi']->query($sql_vi ew_standin); $GLOBALS['sql_query'] . = "\n" . $sql_view_stand in; } } return $views; } /** * Get sql query for copy/ rename table and boolean for whether copy/rename or not * * @param arr ay $tables_full array of all tables in given d b or dbs * @param strin g $sql_query sql quer y for all operations * @param boolean $move whether database nam e is empty or not * @pa ram string $db database name * * @re turn array ($sql_query, $error) */ function PMA _getSqlQueryForCopyTable ($tables_full, $sql_quer y, $move, $db) { $er ror = false; foreach ($tables_full as $each_ table => $tmp) { // skip the views; we h ave creted stand-in defi nitions if (PMA_ Table::isView($db, $each _table)) { c ontinue; } $back = $sql_query; $sql_query = ''; // value of $wh at for this table only $this_what = $_RE QUEST['what']; // do not copy the data from a Merge table // note: on the calli ng FORM, 'data' means 's tructure and data' if (PMA_Table::isMerg e($db, $each_table)) { if ($this_wha t == 'data') { $this_what = 'str ucture'; } if ($this_wha t == 'dataonly') { $this_what = 'nocopy'; } } if ($ this_what != 'nocopy') { // keep the triggers from the origi nal db+table // (third param is empt y because delimiters are only intended // for importing via the mysql client or our Import feature) $triggers = $GLOBAL S['dbi']->getTriggers($d b, $each_table, ''); if (! PMA_Tabl e::moveCopy( $db, $each_table, $ _REQUEST['newname'], $ea ch_table, (isset($this_what) ? $ this_what : 'data'), $move, 'db_ copy' )) { $error = true; // $sql_query is filled by PMA_Table::moveCopy() $sql_quer y = $back . $sql_query; break; } // apply the triggers t o the destination db+tab le if ($trig gers) { $GLOBALS['dbi']->selectD b($_REQUEST['newname']); foreach ($triggers as $trigger) { $ GLOBALS['dbi']->query($t rigger['create']); $GLOBALS[ 'sql_query'] .= "\n" . $ trigger['create'] . ';'; } } // this does not apply to a rename operation if (isset($_REQUE ST['add_constraints']) && ! empt y($GLOBALS['sql_constrai nts_query']) ) { $GL OBALS['sql_constraints_q uery_full_db'][] = $GLOBALS[ 'sql_constraints_query'] ; unset( $GLOBALS['sql_constraint s_query']); } } // $ sql_query is filled by P MA_Table::moveCopy() $sql_query = $back . $sql_query; } return array($sql_query, $error); } /** * Run the EVENT definition for selected database * * to avoid selecting alte rnatively the current an d new db * we would nee d to modify the CREATE d efinitions to qualify * the db name * * @para m string $db database na me * * @return void * / function PMA_runEventD efinitionsForDb($db) { $event_names = $GLOBA LS['dbi']->fetchResult( 'SELECT EVENT_NA ME FROM information_sche ma.EVENTS WHERE EVENT_SC HEMA= \'' . PMA_ Util::sqlAddSlashes($db, true) . '\';' ); if ($event_names) { foreach ($event_na mes as $event_name) { $GLOBALS['dbi' ]->selectDb($db); $tmp_query = $GLOB ALS['dbi']->getDefinitio n($db, 'EVENT', $event_n ame); // col lect for later display $GLOBALS['sql _query'] .= "\n" . $tmp_ query; $GLOB ALS['dbi']->selectDb($_R EQUEST['newname']); $GLOBALS['dbi']- >query($tmp_query); } } } /** * Ha ndle the views, return t he boolean value whether table rename/copy or no t * * @param array $ views views as an array * @param boolean $move whether database name i s empty or not * @param string $db database name * * @return bool ean $_error whether tabl e rename/copy or not */ function PMA_handleTheV iews($views, $move, $db) { $_error = false; // temporarily force to add DROP IF EXIST to CREATE VIEW query, // to remove stand-in VI EW that was created earl ier // ( $_REQUEST[' drop_if_exists'] is used in moveCopy() ) if (isset($_REQUEST['drop_i f_exists'])) { $ temp_drop_if_exists = $_ REQUEST['drop_if_exists' ]; } $_REQUEST[' drop_if_exists'] = 'true '; foreach ($views as $view) { $cop ying_succeeded = PMA_Tab le::moveCopy( $db, $view, $_REQUEST[ 'newname'], $view, 'stru cture', $move, 'db_copy' ); if ( ! $copying_succeeded) { $_error = tr ue; break; } } unset ($_REQUEST['drop_if_exis ts']); if (isset($te mp_drop_if_exists)) { // restore previou s value $_REQUES T['drop_if_exists'] = $t emp_drop_if_exists; } return $_error; } /** * Create all accum ulated constraaints * * @return void */ funct ion PMA_createAllAccumul atedConstraints() { $GLOBALS['dbi']->selectD b($_REQUEST['newname']); foreach ($GLOBALS[' sql_constraints_query_fu ll_db'] as $one_query) { $GLOBALS['dbi'] ->query($one_query); // and prepare to d isplay them $GLO BALS['sql_query'] .= "\n " . $one_query; } unset($GLOBALS['sql_co nstraints_query_full_db' ]); } /** * Duplicate the bookmarks for the db (done once for each db) * * @param boolean $_ error whether table rena me/copy or not * @param string $db databas e name * * @return voi d */ function PMA_dupli cateBookmarks($_error, $ db) { if (! $_error && $db != $_REQUEST['new name']) { $get_f ields = array('user', 'l abel', 'query'); $where_fields = array(' dbase' => $db); $new_fields = array('dba se' => $_REQUEST['newnam e']); PMA_Table: :duplicateInfo( 'bookmarkwork', 'boo kmark', $get_fields, $where_fields, $new_fields ); } } /** * Get the H TML snippet for order th e table * * @param arr ay $columns columns arra y * * @return string $ html_out */ function PM A_getHtmlForOrderTheTabl e($columns) { $html_ output = '<div class="op erations_half_width">'; $html_output .= '<fo rm method="post" id="alt erTableOrderby" ' . 'action="tbl_operati ons.php">'; $html_ou tput .= PMA_URL_getHidde nInputs( $GLOBAL S['db'], $GLOBALS['table '] ); $html_outp ut .= '<fieldset id="fie ldset_table_order">' . '<legend>' . __(' Alter table order by') . '</legend>' . ' <select name="order_fiel d">'; foreach ($col umns as $fieldname) { $html_output .= '< option ' . ' value="' . htmlspecialch ars($fieldname['Field']) . '">' . ht mlspecialchars($fieldnam e['Field']) . '</option> ' . "\n"; } $htm l_output .= '</select> ' . __('(singly)') . ' ' . '<br />' . '<input id="order_o rder_asc" name="order_or der"' . ' type=" radio" value="asc" check ed="checked" />' . '<label for="order_or der_asc">' . __('Ascendi ng') . '</label>' . '<input id="order_or der_desc" name="order_or der"' . ' type=" radio" value="desc" />' . '<label for="o rder_order_desc">' . __( 'Descending') . '</label >' . '</fieldset >' . '<fieldset class="tblFooters">' . '<input type="hid den" name="submitorderby " value="1" />' . '<input type="submit" value="' . __('Go') . '" />' . '</fields et>' . '</form>' . '</div>'; return $html_output; } /** * Get the HTML s nippet for move table * * @return string $html _output */ function PMA _getHtmlForMoveTable() { $html_output = '<di v class="operations_half _width">'; $html_out put .= '<form method="po st" action="tbl_operatio ns.php"' . ' id= "moveTableForm" class="a jax"' . ' onsubm it="return emptyFormElem ents(this, \'new_name\') ">' . PMA_URL_ge tHiddenInputs($GLOBALS[' db'], $GLOBALS['table']) ; $html_output .= ' <input type="hidden" nam e="reload" value="1" />' . '<input type= "hidden" name="what" val ue="data" />' . '<fieldset id="fieldset_ table_rename">'; $h tml_output .= '<legend>' . __('Move table to (da tabase<b>.</b>table):') . '</legend>'; if (count($GLOBALS[' pma']->databases) > $GLO BALS['cfg']['MaxDbList'] ) { $html_output .= '<input type="text" maxlength="100" size="30 " ' . 'name= "target_db" value="' . h tmlspecialchars($GLOBALS ['db']) . '" />'; } else { $html_output .= '<sele ct class="halfWidth" nam e="target_db">' . $GLOBALS['pma']->d atabases->getHtmlOptions (true, false) . '</select>'; } $html_output .= '&nbs p;<strong>.</strong>&nbs p;'; $html_output .= '<input class="halfWidt h" type="text" size="20" name="new_name"' . ' onfocus="this.sele ct()" required="required " ' . 'value="' . htmlspecialchars($GLOB ALS['table']) . '" /><br />'; // starting w ith MySQL 5.0.24, SHOW C REATE TABLE includes the AUTO_INCREMENT // n ext value but users can decide if they want it o r not for the operation $html_output .= '<i nput type="checkbox" nam e="sql_auto_increment" ' . 'value="1" id ="checkbox_auto_incremen t_mv" checked="checked" />' . '<label fo r="checkbox_auto_increme nt_mv">' . __('A dd AUTO_INCREMENT value' ) . '</label><br />' . '</fields et>'; $html_output .= '<fieldset class="tbl Footers">' . '<i nput type="submit" name= "submit_move" value="' . __('Go') . '" />' . '</fieldset>' . '</form>' . '</div>'; return $ html_output; } /** * G et the HTML div for Tabl e option * * @param st ring $comment Comment * @param arra y $tbl_collation table collation * @para m string $tbl_storage_e ngine table storage engi ne * @param boolean $is _myisam_or_aria whether MYISAM | ARIA or not * @param boolean $is_isam whether ISAM or not * @param array $pack_keys pa ck keys * @param string $auto_increment va lue of auto increment * @param string $delay_k ey_write delay key wr ite * @param string $t ransactional value of transactional * @par am string $page_checksu m value of page che cksum * @param boolean $is_innodb whet her INNODB or not * @pa ram boolean $is_pbxt whether PBXT or not * @param boolean $i s_aria whethe r ARIA or not * @param string $checksum the checksum * * @ return string $html_outp ut */ function PMA_getT ableOptionDiv($comment, $tbl_collation, $tbl_sto rage_engine, $is_myi sam_or_aria, $is_isam, $ pack_keys, $auto_increme nt, $delay_key_write, $transactional, $page_ checksum, $is_innodb, $i s_pbxt, $is_aria, $check sum ) { $html_output = '<div class="operatio ns_half_width clearfloat ">'; $html_output .= '<form method="post" ac tion="tbl_operations.php "'; $html_output .= ' id="tableOptionsForm" class="ajax">'; $htm l_output .= PMA_URL_getH iddenInputs( $GL OBALS['db'], $GLOBALS['t able'] ); $html_ output .= '<input type=" hidden" name="reload" va lue="1" />'; $html_ output .= PMA_getTableOp tionFieldset( $c omment, $tbl_collation, $tbl_storage_eng ine, $is_myisam_or_aria, $is_isam, $pack_keys, $delay_key_write, $auto_increment, $trans actional, $page_checksum , $is_innodb, $i s_pbxt, $is_aria, $check sum ); $html_ou tput .= '<fieldset class ="tblFooters">' . '<input type="hidden" name="submitoptions" val ue="1" />' . '<i nput type="submit" value ="' . __('Go') . '" />' . '</fieldset>' . '</form>' . '</div>'; ret urn $html_output; } /** * Get HTML fieldset fo r Table option, it conta ins HTML table for optio ns * * @param string $comment Comm ent * @param array $t bl_collation table collation * @param stri ng $tbl_storage_engine table storage engine * @param boolean $is_myisa m_or_aria whether MYISA M | ARIA or not * @para m boolean $is_isam whether ISAM or no t * @param array $pac k_keys pack key s * @param string $del ay_key_write delay ke y write * @param string $auto_increment va lue of auto increment * @param string $transac tional value of tra nsactional * @param str ing $page_checksum value of page checksum * @param boolean $is_in nodb whether IN NODB or not * @param bo olean $is_pbxt whether PBXT or not * @param boolean $is_aria whether ARIA or not * @param string $checksum th e checksum * * @return string $html_output */ function PMA_getTableOp tionFieldset($comment, $ tbl_collation, $tbl_ storage_engine, $is_myis am_or_aria, $is_isam, $p ack_keys, $delay_key _write, $auto_increment, $transactional, $pa ge_checksum, $is_innodb, $is_pbxt, $is_aria, $ch ecksum ) { $html_out put = '<fieldset>' . '<legend>' . __('Ta ble options') . '</legen d>'; $html_output . = '<table>'; //Chang e table name $html_o utput .= '<tr><td>' . __ ('Rename table to') . '< /td>' . '<td>' . '<input type="t ext" size="20" name="new _name" onfocus="this.sel ect()"' . 'value ="' . htmlspecialchars($ GLOBALS['table']) . '" required="require d" />' . '</td>' . '</tr>'; //Table comments $h tml_output .= '<tr><td>' . __('Table comments') . '</td>' . '<td ><input type="text" name ="comment" maxlength="60 " size="30"' . ' value="' . htmlspecialch ars($comment) . '" onfoc us="this.select()" />' . '<input type="h idden" name="prev_commen t" value="' . ht mlspecialchars($comment) . '" />' . '</t d>' . '</tr>'; //Storage engine $html_output .= '<tr><t d>' . __('Storage Engine ') . PMA_Util::s howMySQLDocu('Storage_en gines') . '</td> ' . '<td>' . PMA_StorageEngine:: getHtmlSelect( 'new_tbl_storage_engi ne', null, $tbl_storage_ engine ) . '</td>' . '</ tr>'; //Table chara cter set $html_outpu t .= '<tr><td>' . __('Co llation') . '</td>' . '<td>' . P MA_generateCharsetDropdo wnBox( PMA_C SDROPDOWN_COLLATION, 'tbl_collation' , null, $tbl_collation, false, 3 ) . '</td>' . ' </tr>'; if ($is_myi sam_or_aria || $is_isam) { $html_output .= '<tr>' . '<td><label for="new_pac k_keys">PACK_KEYS</label ></td>' . '< td><select name="new_pac k_keys" id="new_pack_key s">'; $html_out put .= '<option value="D EFAULT"'; if ($p ack_keys == 'DEFAULT') { $html_outpu t .= 'selected="selected "'; } $h tml_output .= '>DEFAULT< /option> <option value="0"'; if ($pack_keys == ' 0') { $html_ output .= 'selected="sel ected"'; } $html_output .= '>0</ option> <option value="1" '; if ($pack_keys == ' 1') { $html_ output .= 'selected="sel ected"'; } $html_output .= '>1</ option>' . ' </select>' . '</td>' . ' </tr>'; } // end if (MYISAM|ISAM) if ($ is_myisam_or_aria) { $html_output .= PMA _getHtmlForTableRow( 'new_checksum', 'CHECKSUM', $checksum ); $html _output .= PMA_getHtmlFo rTableRow( ' new_delay_key_write', 'DELAY_KEY_WRI TE', $delay_ key_write ); } // end if (MYISAM) if ($is_aria) { $html_output .= PMA_g etHtmlForTableRow( 'new_transactiona l', 'TRANSAC TIONAL', $tr ansactional ); $html_output .= PMA_getHtmlForTableRow( 'new_page_ch ecksum', 'PA GE_CHECKSUM', $page_checksum ); } // end if (ARI A) if (strlen($auto _increment) > 0 && ($is_myisam_or_aria | | $is_innodb || $is_pbxt ) ) { $html_ output .= '<tr><td>' . '<label for=" auto_increment_opt">AUTO _INCREMENT</label></td>' . '<td><inp ut type="number" name="n ew_auto_increment" ' . 'id="auto_inc rement_opt"' . 'value="' . $auto_inc rement . '" /></td>' . '</tr> '; } // end if (MYISAM|INN ODB) $possible_row_ formats = PMA_getPossibl eRowFormat(); // fo r MYISAM there is also C OMPRESSED but it can be set only by the // m yisampack utility, so do n't offer here the choic e because if we // t ry it inside an ALTER TA BLE, MySQL (at least in 5.1.23-maria) // doe s not return a warning // (if the table was compressed, it can be se en on the Structure page ) if (isset($possib le_row_formats[$tbl_stor age_engine])) { $current_row_format = st rtoupper($GLOBALS['showt able']['Row_format']); $html_output .= ' <tr><td>' . '<label for="new_row_for mat">ROW_FORMAT</label>< /td>' . '<td >'; $html_output .= PMA_Util::getDropdow n( 'new_row_ format', $possible_row_f ormats[$tbl_storage_engi ne], $curren t_row_format, 'new_row_f ormat' ); $html_output .= '</td> </tr>'; } $html_ output .= '</table>' . '</fieldset>'; return $html_output; } /** * Get the common HTML table row (tr) for new_checksum, new_delay _key_write, * new_trans actional and new_page_ch ecksum * * @param stri ng $attribute class, nam e and id attribute * @p aram string $label l abel value * @param str ing $val checksum, delay_key_write, transa ctional, page_checksum * * @return string $htm l_output */ function PM A_getHtmlForTableRow($at tribute, $label, $val) { return '<tr>' . '<td><label for="' . $attribute . '">' . $l abel . '</label></td>' . '<td><input typ e="checkbox" name="' . $ attribute . '"' . ' id="' . $attribute . '"' . ' value=" 1"' . ((!empty($ val) && $val == 1) ? ' c hecked="checked"' : '') . '/></td>' . '< /tr>'; } /** * Get arr ay of possible row forma ts * * @return array $ possible_row_formats */ function PMA_getPossibl eRowFormat() { // th e outer array is for eng ines, the inner array co ntains the dropdown // option values as keys then the dropdown optio n labels $possible_ row_formats = array( 'ARIA' => array( 'FIXED' = > 'FIXED', ' DYNAMIC' => 'DYNAMIC', 'PAGE' => 'PAGE' ), 'MARIA' => array( 'FIXED' => 'FIXED', 'DYNAMIC' => 'DYNAMIC ', 'PAGE' => 'PAGE' ), 'MYISAM' => arra y( 'FIXED' => 'FIXED', 'DYNAMIC' => 'DYNAM IC' ), ' PBXT' => array( 'FIXED' => 'FI XED', 'DYNA MIC' => 'DYNAMIC' ), 'INNODB' = > array( 'C OMPACT' => 'COMPACT', 'REDUNDANT' => 'REDUNDANT' ) ); $innodbEngi nePlugin = PMA_StorageEn gine::getEngine('innodb' ); $innodbPluginVers ion = $innodbEnginePlugi n->getInnodbPluginVersio n(); if (!empty($inn odbPluginVersion)) { $innodb_file_format = $innodbEnginePlugin-> getInnodbFileFormat(); } else { $inn odb_file_format = ''; } if ('Barracuda' == $innodb_file_format && $innodbEngineP lugin->supportsFilePerTa ble() ) { $p ossible_row_formats['INN ODB']['DYNAMIC'] = 'DYNA MIC'; $possible_ row_formats['INNODB']['C OMPRESSED'] = 'COMPRESSE D'; } return $p ossible_row_formats; } /** * Get HTML div for copy table * * @return string $html_output */ function PMA_getHtmlFor Copytable() { $html_ output = '<div class="op erations_half_width">'; $html_output .= '<fo rm method="post" action= "tbl_operations.php" ' . 'name="copyTabl e" ' . 'id="copy Table" ' . ' cla ss="ajax" ' . 'o nsubmit="return emptyFor mElements(this, \'new_na me\')">' . PMA_U RL_getHiddenInputs($GLOB ALS['db'], $GLOBALS['tab le']) . '<input type="hidden" name="relo ad" value="1" />'; $html_output .= '<fields et>'; $html_output . = '<legend>' . _ _('Copy table to (databa se<b>.</b>table):') . '< /legend>'; if (coun t($GLOBALS['pma']->datab ases) > $GLOBALS['cfg'][ 'MaxDbList']) { $html_output .= '<input class="halfWidth" type=" text" maxlength="100" ' . 'size="30" name="target_db" ' . 'value="' . ht mlspecialchars($GLOBALS[ 'db']) . '"/>'; } el se { $html_outpu t .= '<select class="hal fWidth" name="target_db" >' . $GLOBAL S['pma']->databases->get HtmlOptions(true, false) . '</select >'; } $html_outp ut .= ' <strong>.</ strong> '; $htm l_output .= '<input clas s="halfWidth" type="text " required="required" ' . 'size="20" nam e="new_name" onfocus="th is.select()" ' . 'value="' . htmlspecial chars($GLOBALS['table']) . '"/><br />'; $ch oices = array( 'structure' => __('St ructure only'), 'data' => __('S tructure and data'), 'dataonly' => __('Data only')); $ html_output .= PMA_Util: :getRadioFields( 'what', $choices, 'data ', true ); $htm l_output .= '<input type ="checkbox" name="drop_i f_exists" ' . 'v alue="true" id="checkbox _drop" />' . '<l abel for="checkbox_drop" >' . sprintf(__( 'Add %s'), 'DROP TABLE') . '</label><br />' . '<input type="chec kbox" name="sql_auto_inc rement" ' . 'val ue="1" id="checkbox_auto _increment_cp" />' . '<label for="checkb ox_auto_increment_cp">' . __('Add AUTO_I NCREMENT value') . '</la bel><br />'; // dis play "Add constraints" c hoice only if there are // foreign keys if (PMA_getForeigners($G LOBALS['db'], $GLOBALS[' table'], '', 'foreign')) { $html_output .= '<input type="checkbo x" name="add_constraints " ' . 'value ="1" id="checkbox_constr aints" />'; $htm l_output .= '<label for= "checkbox_constraints">' . __('Add c onstraints') . '</label> <br />'; } // endif if (isset($_COOKIE[ 'pma_switch_to_new']) && $_COOKIE['pma_s witch_to_new'] == 'true' ) { $pma_sw itch_to_new = 'true'; } $html_output .= '<input type="checkbox" name="switch_to_new" va lue="true"' . 'i d="checkbox_switch"' . ((isset($pma_swit ch_to_new) && $pma_switc h_to_new == 'true') ? ' checked="che cked"' : '' . '/>'); $html_outpu t .= '<label for="checkb ox_switch">' . _ _('Switch to copied tabl e') . '</label>' . '</fieldset>'; $ html_output .= '<fieldse t class="tblFooters">' . '<input type="s ubmit" name="submit_copy " value="' . __('Go') . '" />' . '</fiel dset>' . '</form >' . '</div>'; return $html_output; } /** * Get HTML snip pet for table maintence * * @param boolean $is _myisam_or_aria whether MYISAM | ARIA or not * @param boolean $is_innod b whether innodb or not * @param boolea n $is_berkeleydb whe ther berkeleydb or not * @param array $url_p arams array of UR L parameters * * @retu rn string $html_output */ function PMA_getHtmlF orTableMaintenance( $is_myisam_or_aria, $is_ innodb, $is_berkeleydb, $url_params ) { $htm l_output = '<div class=" operations_half_width">' ; $html_output .= '< fieldset>' . '<l egend>' . __('Table main tenance') . '</legend>'; $html_output .= '<u l id="tbl_maintenance">' ; // Note: BERKELEY (BDB) is no longer supp orted, starting with MyS QL 5.1 $html_output .= PMA_getListofMaintain ActionLink( $is_ myisam_or_aria, $is_inno db, $url_params, $is_ber keleydb ); $htm l_output .= '</ul>' . '</fieldset>' . '</div>'; ret urn $html_output; } /** * Get HTML 'li' having a link of maintain acti on * * @param boolean $is_myisam_or_aria wheth er MYISAM | ARIA or not * @param boolean $is_in nodb whether inn odb or not * @param arr ay $url_params array of URL parameters * @param boolean $is_be rkeleydb whether be rkeleydb or not * * @r eturn string $html_outpu t */ function PMA_getLi stofMaintainActionLink($ is_myisam_or_aria, $ is_innodb, $url_params, $is_berkeleydb ) { $ html_output = ''; i f ($is_myisam_or_aria || $is_innodb || $is_berke leydb) { if ($is _myisam_or_aria || $is_i nnodb) { $pa rams = array( 'sql_query' => 'CH ECK TABLE ' . PMA_Util::back quote($GLOBALS['table']) , 'table _maintenance' => 'Go', ); $html_output .= PMA_ge tMaintainActionlink( __('Check t able'), $params, $url_params, 'CHECK_TABLE' ); } if ($is_innodb) { $params = arr ay( 'sql _query' => 'ALTER TABLE ' . PMA_ Util::backquote($GLOBALS ['table']) . ' ENGINE = InnoDB;' ); $html_output .= PMA_ getMaintainActionlink( __('Defra gment table'), $params, $url_params, 'InnoDB_Fil e_Defragmenting', 'Table_types' ); } if ($is_innodb || $is_myisam_or_aria || $is_berkeleydb) { $params = array( 'sql_que ry' => 'ANALYZE TABLE ' . PM A_Util::backquote($GLOBA LS['table']), 'table_maintenance ' => 'Go', ) ; $html_outp ut .= PMA_getMaintainAct ionlink( __('Analyze table'), $params, $url_para ms, 'ANA LYZE_TABLE' ); } if ($is_myisam_or_aria && ! PMA_DRIZZLE) { $params = array( 'sql_query' => 'REPAIR TABLE ' . PMA_Uti l::backquote($GLOBALS['t able']), 'table_maintenance' => 'Go', ); $html_output .= PMA_getMaintainActionli nk( __(' Repair table'), $params, $url_params, 'REPAIR_TA BLE' ); } if (($is_m yisam_or_aria || $is_inn odb || $is_berkeleydb) && !PMA_DRIZZ LE ) { $params = array( 'sql_query' => 'OPTIMIZE TABLE ' . PMA_U til::backquote($GLOBALS[ 'table']), 'table_maintenance' = > 'Go', ); $html_output .= PMA_getMaintainAction link( __ ('Optimize table'), $params, $url_params , 'OPTIM IZE_TABLE' ) ; } } // end MYISAM or BERKELEYDB ca se $params = array( 'sql_query' => 'FLUSH TABLE ' . PMA_Util::backquote ($GLOBALS['table']), 'message_to_show' = > sprintf( _ _('Table %s has been flu shed.'), htm lspecialchars($GLOBALS[' table']) ), 'reload' => 1, ) ; $html_output .= P MA_getMaintainActionlink ( __('Flush the table (FLUSH)'), $params, $url_p arams, 'FLUSH' ); return $html_ output; } /** * Get ma intain action HTML link * * @param string $act ion action name * @ param array $params url parameters array * @param array $url_para ms additional url parame ters * @param string $l ink contains name of page/anchor that is b eing linked * * @retur n string $html_output * / function PMA_getMainta inActionlink($action, $p arams, $url_params, $lin k) { return '<li>' . '<a class="main tain_action ajax" ' . 'href="sql.php' . PMA_URL_getCommo n(array_merge($url_param s, $params)) . '">' . $action . '</a>' . PMA_Uti l::showMySQLDocu($link) . '</li>'; } /* * * Get HTML for Delete data or table (truncate table, drop table) * * @param array $truncate _table_url_params url pa rameter array for trunca te table * @param array $dropTableUrlParams url parameter array for drop table * * @re turn string $html_output */ function PMA_getHtm lForDeleteDataOrTable( $truncate_table_url_p arams, $dropTableUrl Params ) { $html_out put = '<div class="opera tions_half_width">' . '<fieldset class=" caution">' . '<l egend>' . __('Delete dat a or table') . '</legend >'; $html_output .= '<ul>'; if (! empt y($truncate_table_url_pa rams)) { $html_o utput .= PMA_getDeleteDa taOrTablelink( $truncate_table_url_p arams, 'TRUN CATE_TABLE', __('Empty the table (TR UNCATE)'), ' truncate_tbl_anchor' ); } if (!e mpty ($dropTableUrlParam s)) { $html_outp ut .= PMA_getDeleteDataO rTablelink( $dropTableUrlParams, 'DROP_TABLE', __('Delete th e table (DROP)'), 'drop_tbl_anchor' ); } $ht ml_output .= '</ul></fie ldset></div>'; retu rn $html_output; } /** * Get the HTML link for Truncate table, Drop ta ble and Drop db * * @p aram array $url_params url parameter array for delete data or table * @param string $syntax TRUNCATE_TABLE or DROP _TABLE or DROP_DATABASE * @param string $link link to be shown * @param string $htmlId id of the link * * @return String html outp ut */ function PMA_getD eleteDataOrTablelink($ur l_params, $syntax, $link , $htmlId) { return '<li><a ' . 'hr ef="sql.php' . PMA_URL_g etCommon($url_params) . '"' . ' id="' . $htmlId . '" class="ajax ">' . $link . '< /a>' . PMA_Util: :showMySQLDocu($syntax) . '</li>'; } /* * * Get HTML snippet fo r partition maintenance * * @param array $part ition_names array of par tition names for a speci fic db/table * @param a rray $url_params ur l parameters * * @retu rn string $html_output */ function PMA_getHtmlF orPartitionMaintenance($ partition_names, $url_pa rams) { $choices = a rray( 'ANALYZE' => __('Analyze'), 'CHECK' => __('Check') , 'OPTIMIZE' => __('Optimize'), 'REBUILD' => __('Rebuild '), 'REPAIR' => __('Repair') ); $html_output = '<div cl ass="operations_half_wid th">' . '<form m ethod="post" action="tbl _operations.php">' . PMA_URL_getHiddenIn puts($GLOBALS['db'], $GL OBALS['table']) . '<fieldset>' . '<legend>' . __('Partit ion maintenance') . '</l egend>'; $html_sele ct = '<select name="part ition_name">' . "\n"; foreach ($partition_na mes as $one_partition) { $one_partition = htmlspecialchars($one_ partition); $htm l_select .= '<option val ue="' . $one_partition . '">' . $one _partition . '</option>' . "\n"; } $html _select .= '</select>' . "\n"; $html_output .= sprintf(__('Partition %s'), $html_select); $html_output .= PMA_U til::getRadioFields( 'partition_operatio n', $choices, '', false ); $html_output .= PMA_Util::showMySQLDo cu('partitioning_mainten ance'); $this_url_pa rams = array_merge( $url_params, array( 'sql _query' => 'ALTER TABLE ' . PMA_Util ::backquote($GLOBALS['ta ble']) . ' R EMOVE PARTITIONING;' ) ); $html_ output .= '<br /><a href ="sql.php' . PMA _URL_getCommon($this_url _params) . '">' . __('Remove partitionin g') . '</a>'; $html _output .= '</fieldset>' . '<fieldset cl ass="tblFooters">' . '<input type="hidde n" name="submit_partitio n" value="1">' . '<input type="submit" v alue="' . __('Go') . '" />' . '</fieldse t>' . '</form>' . '</div>'; return $html_output; } /** * Get the HTML for Referential Integrity c heck * * @param array $foreign all Relation s to foreign tables for a given table * or opt ionally a given column i n a table * @param arra y $url_params array of u rl parameters * * @ret urn string $html_output */ function PMA_getHtml ForReferentialIntegrityC heck($foreign, $url_para ms) { $html_output = '<div class="operations _half_width">' . '<fieldset>' . '<legend>' . __('Check r eferential integrity:') . '</legend>'; $htm l_output .= '<ul>'; foreach ($foreign as $m aster => $arr) { $join_query = 'SELECT ' . PMA_Util ::backquote($GLOBALS['ta ble']) . '.*' . ' FROM ' . PMA_Util: :backquote($GLOBALS['tab le']) . ' LE FT JOIN ' . PMA_Util::backquote($arr ['foreign_db']) . '.' . PMA_Util::backquote($arr ['foreign_table']); if ($arr['foreign_ta ble'] == $GLOBALS['table ']) { $forei gn_table = $GLOBALS['tab le'] . '1'; $join_query .= ' AS ' . PMA_Util::backquote($for eign_table); } e lse { $forei gn_table = $arr['foreign _table']; } $join_query .= ' ON ' . PMA_Util ::backquote($GLOBALS['ta ble']) . '.' . PMA_Util::backquote($ master) . ' = ' . PMA_Ut il::backquote($arr['fore ign_db']) . '.' . PMA_Ut il::backquote($foreign_t able) . '.' . PMA_Util::backquote($a rr['foreign_field']) . ' WHERE ' . PMA_Util::bac kquote($arr['foreign_db' ]) . '.' . PMA_Util::bac kquote($foreign_table) . '.' . PMA_U til::backquote($arr['for eign_field']) . ' IS NULL AND ' . PMA_Util::back quote($GLOBALS['table']) . '.' . PMA _Util::backquote($master ) . ' IS NOT NULL'; $this_ur l_params = array_merge( $url_params, array('sql_ query' => $join_query) ); $html _output .= '<li>' . '<a href="sql.ph p' . PMA_URL _getCommon($this_url_par ams) . '">' . $master . ' -> ' . $arr[ 'foreign_db'] . '.' . $arr['foreign_ table'] . '.' . $arr['fo reign_field'] . '</a></li>' . "\n"; } // foreach $forei gn $html_output .= ' </ul></fieldset></div>'; return $html_outpu t; } /** * Reorder tab le based on request para ms * * @return array S QL query and result */ function PMA_getQueryAnd ResultForReorderingTable () { $sql_query = 'A LTER TABLE ' . P MA_Util::backquote($GLOB ALS['table']) . ' ORDER BY ' . P MA_Util::backquote(urlde code($_REQUEST['order_fi eld'])); if (isset($ _REQUEST['order_order']) && $_REQUEST['o rder_order'] === 'desc' ) { $sql_que ry .= ' DESC'; } $sql_query .= ';'; $result = $GLOBALS['dbi' ]->query($sql_query); return array($sql_que ry, $result); } /** * Get table alters array * * @param boolean $is_ myisam_or_aria whether MYISAM | ARIA or not * @param boolean $is_isam whether ISA M or not * @param strin g $pack_keys pack keys * @param stri ng $checksum value of checksum * @p aram boolean $is_aria whether ARIA o r not * @param string $page_checksum val ue of page checksum * @ param string $delay_key _write delay key wri te * @param boolean $is _innodb whethe r INNODB or not * @para m boolean $is_pbxt whether PBXT or n ot * @param string $ro w_format row fo rmat * @param string $ newTblStorageEngine tabl e storage engine * @par am string $transactiona l value of transac tional * @param string $tbl_collation co llation of the table * * @return array $table _alters */ function PMA _getTableAltersArray($is _myisam_or_aria, $is_isa m, $pack_keys, $chec ksum, $is_aria, $page_ch ecksum, $delay_key_write , $is_innodb, $is_pb xt, $row_format, $newTbl StorageEngine, $transact ional, $tbl_collation ) { global $auto_incre ment; $table_alters = array(); if (iss et($_REQUEST['comment']) && urldecode($_ REQUEST['prev_comment']) !== $_REQUEST['comment' ] ) { $table _alters[] = 'COMMENT = \ '' . PMA_Uti l::sqlAddSlashes($_REQUE ST['comment']) . '\''; } if (! empty($ne wTblStorageEngine) && strtolower($newTbl StorageEngine) !== strto lower($GLOBALS['tbl_stor age_engine']) ) { $table_alters[] = 'ENGINE = ' . $newTblSto rageEngine; } if (! empty($_REQUEST['tbl _collation']) && $_REQUEST['tbl_collatio n'] !== $tbl_collation ) { $table_al ters[] = 'DEFAULT ' . PMA_generateCh arsetQueryPart($_REQUEST ['tbl_collation']); } if (($is_myisam_o r_aria || $is_isam) && isset($_REQUEST[' new_pack_keys']) && $_REQUEST['new_pack_ keys'] != (string)$pack_ keys ) { $ta ble_alters[] = 'pack_key s = ' . $_REQUEST['new_p ack_keys']; } $ _REQUEST['new_checksum'] = empty($_REQUEST['new_ checksum']) ? '0' : '1'; if ($is_myisam_or_a ria && $_REQUEST ['new_checksum'] !== $ch ecksum ) { $ table_alters[] = 'checks um = ' . $_REQUEST['new_ checksum']; } $ _REQUEST['new_transactio nal'] = empty($_ REQUEST['new_transaction al']) ? '0' : '1'; i f ($is_aria && $ _REQUEST['new_transactio nal'] !== $transactional ) { $table_ alters[] = 'TRANSACTIONA L = ' . $_REQUEST['new_t ransactional']; } $_REQUEST['new_page_c hecksum'] = empt y($_REQUEST['new_page_ch ecksum']) ? '0' : '1'; if ($is_aria && $_REQUEST['new_page_c hecksum'] !== $page_chec ksum ) { $ta ble_alters[] = 'PAGE_CHE CKSUM = ' . $_REQUEST['n ew_page_checksum']; } $_REQUEST['new_de lay_key_write'] = empty($_REQUEST['new_d elay_key_write']) ? '0' : '1'; if ($is_myisa m_or_aria && $_R EQUEST['new_delay_key_wr ite'] !== $delay_key_wri te ) { $tabl e_alters[] = 'delay_key_ write = ' . $_REQUEST['n ew_delay_key_write']; } if (($is_myisam _or_aria || $is_innodb | | $is_pbxt) && ! empty($_REQUEST['new_au to_increment']) && (! isset($auto_increm ent) || $_REQUES T['new_auto_increment'] !== $auto_increment) ) { $table_alte rs[] = 'auto_increment = ' . PMA_Uti l::sqlAddSlashes($_REQUE ST['new_auto_increment'] ); } if (($is_m yisam_or_aria || $is_inn odb || $is_pbxt) && ! empty($_REQUEST[' new_row_format']) && (!strlen($row_forma t) || strtolower ($_REQUEST['new_row_form at']) !== strtolower($ro w_format)) ) { $table_alters[] = 'RO W_FORMAT = ' . PMA_Util::sqlAddSlash es($_REQUEST['new_row_fo rmat']); } retu rn $table_alters; } /** * set initial value of the set of variables, b ased on the current tabl e engine * * @param st ring $tbl_storage_engine table storage engine * * @return array ($is_m yisam_or_aria, $is_innod b, $is_isam, * $is_berkeleydb, $ is_aria, $is_pbxt) */ f unction PMA_setGlobalVar iablesForEngine($tbl_sto rage_engine) { $uppe rTblStorEngine = strtoup per($tbl_storage_engine) ; //Options that ap ply to MYISAM usually ap ply to ARIA $is_myis am_or_aria = ($upperTblS torEngine == 'MYISAM' || $upperTblStorEn gine == 'ARIA' | | $upperTblStorEngine == 'MARIA' ); $is_ aria = ($upperTblStorEng ine == 'ARIA'); $is _isam = ($upperTblStorEn gine == 'ISAM'); $is _innodb = ($upperTblStor Engine == 'INNODB'); $is_berkeleydb = ($uppe rTblStorEngine == 'BERKE LEYDB'); $is_pbxt = ($upperTblStorEngine == 'PBXT'); return arr ay( $is_myisam_o r_aria, $is_innodb, $is_ isam, $is_berkel eydb, $is_aria, $is_pbxt ); } /** * Get wa rning messages array * * @return array $warni ng_messages */ function PMA_getWarningMessagesA rray() { $warning_me ssages = array(); fo reach ($GLOBALS['dbi']-> getWarnings() as $warnin g) { // In Maria DB 5.1.44, when altering a table from Maria to M yISAM // and if TRANSACTIONAL was set, t he system reports an err or; // I discuss ed with a Maria develope r and he agrees that thi s // should not be reported with a Level of Error, so here // I just ignore it. But there are other 1478 messages // tha t it's better to show. if (! ($_REQUEST[ 'new_tbl_storage_engine' ] == 'MyISAM' && $warning['Code'] == '1478' && $ warning['Level'] == 'Err or') ) { $warning_messages[] = $warning['Level'] . ' : #' . $warning['Code'] . ' ' . $warning['Message']; } } return $warning_messages; } /* * * Get SQL query and r esult after ran this SQL query for a partition o peration * has been req uested by the user * * @return array $sql_quer y, $result */ function PMA_getQueryAndResultFor Partition() { $sql_q uery = 'ALTER TABLE ' . PMA_Util::backqu ote($GLOBALS['table']) . ' ' . $_REQUEST ['partition_operation'] . ' PARTITION ' . $_REQUEST['par tition_name'] . ';'; $result = $GLOBALS['dbi ']->query($sql_query); return array($sql_qu ery, $result); } ?> |