Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 12,339 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Q1_9Set Party Tu... | 8970040 | 46 secs ago | IN | 0 S | 0.06181269 | ||||
Q1_9Set Party Tu... | 8968482 | 9 mins ago | IN | 0 S | 0.05991808 | ||||
Q1_8Train Pet | 8968209 | 10 mins ago | IN | 0 S | 0.04126434 | ||||
Q1_7Train Pet | 8968124 | 11 mins ago | IN | 0 S | 0.027934 | ||||
Q1_6Train Pet | 8968100 | 11 mins ago | IN | 0 S | 0.01910595 | ||||
Q1_5Train Pet | 8968076 | 11 mins ago | IN | 0 S | 0.02821311 | ||||
Q1_4Train Pet | 8968051 | 11 mins ago | IN | 0 S | 0.0191082 | ||||
Q1_3Feed Pet | 8967954 | 12 mins ago | IN | 0 S | 0.04340048 | ||||
Q1_2Get First Li... | 8967814 | 13 mins ago | IN | 0 S | 0.03187136 | ||||
Q1_1Jojo Transce... | 8967492 | 14 mins ago | IN | 0 S | 0.01674628 | ||||
Q1_4Train Pet | 8967066 | 17 mins ago | IN | 0 S | 0.04030604 | ||||
Q1_3Feed Pet | 8967000 | 17 mins ago | IN | 0 S | 0.04602793 | ||||
Q1_2Get First Li... | 8966911 | 18 mins ago | IN | 0 S | 0.03975043 | ||||
Q1_1Jojo Transce... | 8966474 | 20 mins ago | IN | 0 S | 0.02102717 | ||||
Q3_2Restaurant T... | 8964737 | 30 mins ago | IN | 0 S | 0.00498076 | ||||
Q3_1Save Qing Yu... | 8964574 | 31 mins ago | IN | 0 S | 0.00375926 | ||||
Q2_2Shopping Tut... | 8964444 | 31 mins ago | IN | 0 S | 0.0045742 | ||||
Q1_9Set Party Tu... | 8964430 | 31 mins ago | IN | 0 S | 0.03565675 | ||||
Q2_1Fight Lena | 8964140 | 33 mins ago | IN | 0 S | 0.04929319 | ||||
Q1_8Train Pet | 8963960 | 34 mins ago | IN | 0 S | 0.04349321 | ||||
Q1_7Train Pet | 8963929 | 34 mins ago | IN | 0 S | 0.02688811 | ||||
Q1_6Train Pet | 8963905 | 34 mins ago | IN | 0 S | 0.01909985 | ||||
Q1_5Train Pet | 8963866 | 34 mins ago | IN | 0 S | 0.0191111 | ||||
Q1_4Train Pet | 8963834 | 34 mins ago | IN | 0 S | 0.0191082 | ||||
Q2_1Fight Lena | 8963669 | 35 mins ago | IN | 0 S | 0.04228914 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FARPG_QuestSystemV1
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-14 */ // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: FINALdeployFA/LIB - Common Structs.sol pragma solidity ^0.8.9; library S { //Pet struct struct Unit { uint hp; //unit fainted when hp <= 0 uint attack; //attack - defense = damage on hp uint defense; //attack - defense = damage on hp uint speed; //how frequent to take a move uint intelligence; //how frequent to use skill uint genestrength; //depends on how many duplicates uint range; //range skill, id uint special; //special skill, id } struct Status { uint id; //unit id uint family; //determine which class of gear it can be wore. record while evolve, since its only has max 2 family, example Dragon+phantom, and 30gene max, so can use *100 uint stage; //1 is rookie, 2 is mature, 3 is perfect } struct Time { uint bond; //how many time you took on this unit , use to evolve uint stamina; //how much you can train it per day. it should follow saturation graph uint hunger; //how much you feed it per day. it should follow saturation graph } } // File: FINALdeployFA/LIB - WeatherOutfit.sol pragma solidity ^0.8.0; library WO { function WeatherBuff (S.Unit[6] memory _UnitGroup, uint _weather) external pure returns (S.Unit[6] memory UnitGroup) { UnitGroup = _UnitGroup; //--------weather system--------- // WARNING: Cannot have + stats, because empty slot still empty after multiply. //enum Weather { Sunny, Cloudy, Rainy, Thunderstorm, Snowy, Aurora, BloodMoon, NONE } 0=Sunny and so on 7 or more = none //0 Sunny day Fire ATK x2, Nature INTx2 //1 Cloudy day has nothing //2 Rainy day, Water HPx1.5 //3 Thunderstorm day, Electric SPDx2 //4 Snowy day, Ice DEF x2 //5 Aurora day, Light speed x2 //6 Bloodmoon day, Dark HPx2 //****Lings with special type //Fire = 3, 5, 10, 23, 28, 38, 39, 60, 63, 69, 81, 95 //Nature = 20, 21, 22, 24, 26, 29, 30, 42, 51, 72, 76, 80, 86, 96 //Water = 15, 17, 31, 35, 71, 75, 79, 98 //Electric = 2, 4, 27, 55, 57, 62, 73, 85, 87, 97 //Ice = 12, 14, 16, 25, 43, 46, 47, 61, 64, 82 //Dark = 8, 9, 11, 18, 32, 33, 36, 44, 54, 56, 58, 70, 74, 78, 84, 88 //Light = 6, 34, 40, 48, 77, 89, 99 for (uint i = 0; i < UnitGroup.length; i++) { if (_weather == 0 && ( UnitGroup[i].special == 3 || UnitGroup[i].special == 5 || UnitGroup[i].special == 10 || UnitGroup[i].special == 23 || UnitGroup[i].special == 28 || UnitGroup[i].special == 38 || UnitGroup[i].special == 39 || UnitGroup[i].special == 60 || UnitGroup[i].special == 63 || UnitGroup[i].special == 69 || UnitGroup[i].special == 81 || UnitGroup[i].special == 95)) { //Fire UnitGroup[i].attack = UnitGroup[i].attack*2; } else if (_weather == 0 && ( UnitGroup[i].special == 20 || UnitGroup[i].special == 21 || UnitGroup[i].special == 22 || UnitGroup[i].special == 24 || UnitGroup[i].special == 26 || UnitGroup[i].special == 29 || UnitGroup[i].special == 30 || UnitGroup[i].special == 42 || UnitGroup[i].special == 51 || UnitGroup[i].special == 72 || UnitGroup[i].special == 76 || UnitGroup[i].special == 80 || UnitGroup[i].special == 86 || UnitGroup[i].special == 96)) { //Nature UnitGroup[i].intelligence = UnitGroup[i].intelligence*2; } else if (_weather == 2 && ( UnitGroup[i].special == 15 || UnitGroup[i].special == 17 || UnitGroup[i].special == 31 || UnitGroup[i].special == 35 || UnitGroup[i].special == 71 || UnitGroup[i].special == 75 || UnitGroup[i].special == 79 || UnitGroup[i].special == 98)) { //Water UnitGroup[i].hp = (UnitGroup[i].hp*15)/10; } else if (_weather == 3 && ( UnitGroup[i].special == 2 || UnitGroup[i].special == 4 || UnitGroup[i].special == 27 || UnitGroup[i].special == 55 || UnitGroup[i].special == 57 || UnitGroup[i].special == 62 || UnitGroup[i].special == 73 || UnitGroup[i].special == 85 || UnitGroup[i].special == 87 || UnitGroup[i].special == 97)) { //Electric UnitGroup[i].speed = UnitGroup[i].speed*2; } else if (_weather == 4 && ( UnitGroup[i].special == 12 || UnitGroup[i].special == 14 || UnitGroup[i].special == 16 || UnitGroup[i].special == 25 || UnitGroup[i].special == 43 || UnitGroup[i].special == 46 || UnitGroup[i].special == 47 || UnitGroup[i].special == 61 || UnitGroup[i].special == 64 || UnitGroup[i].special == 82)) { //Ice UnitGroup[i].defense = UnitGroup[i].defense*2; } else if (_weather == 6 && ( UnitGroup[i].special == 8 || UnitGroup[i].special == 9 || UnitGroup[i].special == 11 || UnitGroup[i].special == 18 || UnitGroup[i].special == 32 || UnitGroup[i].special == 33 || UnitGroup[i].special == 36 || UnitGroup[i].special == 44 || UnitGroup[i].special == 54 || UnitGroup[i].special == 56 || UnitGroup[i].special == 58 || UnitGroup[i].special == 70 || UnitGroup[i].special == 74 || UnitGroup[i].special == 78 || UnitGroup[i].special == 84 || UnitGroup[i].special == 88)) { //Dark UnitGroup[i].hp = UnitGroup[i].hp*2; } else if (_weather == 5 && ( UnitGroup[i].special == 6 || UnitGroup[i].special == 34 || UnitGroup[i].special == 40 || UnitGroup[i].special == 48 || UnitGroup[i].special == 77 || UnitGroup[i].special == 89 || UnitGroup[i].special == 99)) { //Light UnitGroup[i].speed = UnitGroup[i].speed*2; } } } /* function calibrate() public returns (S.Unit[6] memory UnitGroup) { S.Unit[6] memory _UnitGroup; uint[5] memory _outfitsID; uint[5] memory _outfitBalance; _outfitsID[0] = 3015; _outfitsID[1] = 6020; _outfitsID[2] = 1133; _outfitsID[3] = 1140; _outfitsID[4] = 1147; _outfitBalance[0] = 1; _outfitBalance[1] = 2; _outfitBalance[2] = 3; _outfitBalance[3] = 4; _outfitBalance[4] = 5; UnitGroup = TrainersOutfitBonus(_UnitGroup, _outfitsID,_outfitBalance); }*/ function TrainersOutfitBonus (S.Unit[6] memory _UnitGroup, uint[5] memory _outfitsID, uint[5] memory _outfitBalance) internal pure returns (S.Unit[6] memory UnitGroup) { //_outfit[0~4] is outfit ID for the trainer ID. (what to wear) ID 0 means wearing nothing //[0] = Aerobot [1] = headgear [2] = Body [3] = Leggings [4 = Boots UnitGroup = _UnitGroup; //convert Outfit balance into Multiplier for (uint i=0; i<5; i++) { if (_outfitBalance[i] >= 4096) { _outfitBalance[i] = 5; } else if (_outfitBalance[i] >= 512) { _outfitBalance[i] = 4; } else if (_outfitBalance[i] >= 64) { _outfitBalance[i] = 3; } else if (_outfitBalance[i] >= 8) { _outfitBalance[i] = 2; } else if (_outfitBalance[i] >= 1) { _outfitBalance[i] = 1; } //otherwise = 0, multiplier =0 } S.Unit memory Bonus; //Get Bonus from each outfit //========== AEROBOT ====================== if (_outfitsID[0] == 3001) { //Bolt (Aerobot) //spd + 6 Bonus.speed += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3002) { //Pixi (Aerobot) //atk + 6 Bonus.attack += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3003) { //Finspark (Aerobot) //SPD + 10 Bonus.speed += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3004) { //Cyanite //ATK + 10 Bonus.attack += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3005) { //Daemon //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3006) { //Skye //Int +4 Bonus.intelligence += (4 * _outfitBalance[0]); } else if (_outfitsID[0] == 3007) { //Cocoon //int +3 Bonus.intelligence += (3 * _outfitBalance[0]); } else if (_outfitsID[0] == 3008) { //Orbitron //Spd +8 Bonus.speed += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3009) { //Glide //Atk +8 Bonus.attack += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3010) { //Bolt Mark II //Def + 8 Bonus.defense += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3011) { //Lovey //Hp + 80 Bonus.hp += (80 * _outfitBalance[0]); } else if (_outfitsID[0] == 3012) { //Zetabot //hp + 60 Bonus.hp += (60 * _outfitBalance[0]); } else if (_outfitsID[0] == 3013) { //Roxie //def + 6 Bonus.defense += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3014) { //Puzzle //INT + 5 Bonus.intelligence += (5 * _outfitBalance[0]); } else if (_outfitsID[0] == 3015) { //Aura //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3016) { //Goldon //DEF + 10 Bonus.defense += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3017) { //Meteoron //HP + 100 Bonus.hp += (100 * _outfitBalance[0]); } //========== Headgear ====================== if (_outfitsID[1] == 6001) { //headgear 1 //hp+50 Bonus.hp += (50 * _outfitBalance[1]); } else if (_outfitsID[1] == 6002) { //headgear 2 //atk+3 Bonus.attack += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6003) { //headgear 3 //def+3 Bonus.defense += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6004) { //headgear 4 //spd+3 Bonus.speed += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6005) { //headgear 5 //int+1 Bonus.intelligence += (1 * _outfitBalance[1]); } else if (_outfitsID[1] == 6006) { //headgear 6 //hp+60 Bonus.hp += (60 * _outfitBalance[1]); } else if (_outfitsID[1] == 6007) { //headgear 7 //atk+6 Bonus.attack += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6008) { //headgear 8 //def+6 Bonus.defense += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6009) { //headgear 9 //spd+6 Bonus.speed += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6010) { //headgear 10 //int+3 Bonus.intelligence += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6011) { //headgear 11 //hp+80 Bonus.hp += (80 * _outfitBalance[1]); } else if (_outfitsID[1] == 6012) { //headgear 12 //atk+8 Bonus.attack += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6013) { //headgear 13 //def+8 Bonus.defense += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6014) { //headgear 14 //spd+8 Bonus.speed += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6015) { //headgear 15 //int+4 Bonus.intelligence += (4 * _outfitBalance[1]); } else if (_outfitsID[1] == 6016) { //headgear 16 //hp+100 Bonus.hp += (100 * _outfitBalance[1]); } else if (_outfitsID[1] == 6017) { //headgear 17 //atk+10 Bonus.attack += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6018) { //headgear 18 //def+10 Bonus.defense += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6019) { //headgear 19 //spd+10 Bonus.speed += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6020) { //headgear 20 //int+5 Bonus.intelligence += (5 * _outfitBalance[1]); } //========== Body ====================== if (_outfitsID[2] == 1001) { //Scholar (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1002) { //Scholar (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1003) { //Scholar (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1004) { //Scholar (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1005) { //Scholar (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1006 || _outfitsID[2] == 1007) { //Scholar (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1022) { //Love Embrace (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1023) { //Love Embrace (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1024) { //Love Embrace (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1025) { //Love Embrace (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1026) { //Love Embrace (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1027 || _outfitsID[2] == 1028) { //Love Embrace (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1043) { //Celestial Harmony (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1044) { //Celestial Harmony (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1045) { //Celestial Harmony (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1046) { //Celestial Harmony (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1047) { //Celestial Harmony (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1048 || _outfitsID[2] == 1049) { //Celestial Harmony (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1064) { //Cyber Strike (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1065) { //Cyber Strike (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1066) { //Cyber Strike (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1067) { //Cyber Strike (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1068) { //Cyber Strike (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1069 || _outfitsID[2] == 1070) { //Cyber Strike (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1085) { //Serpent Tribe (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1086) { //Serpent Tribe (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1087) { //Serpent Tribe (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1088) { //Serpent Tribe (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1089) { //Serpent Tribe (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1090 || _outfitsID[2] == 1091) { //Serpent Tribe (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1106) { //Pearl Empress (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1107) { //Pearl Empress (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1108) { //Pearl Empress (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1109) { //Pearl Empress (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1110) { //Pearl Empress (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1111 || _outfitsID[2] == 1112) { //Pearl Empress (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1127) { //Starlight Diva (Body) //hp 100 Bonus.hp += (100 * _outfitBalance[2]); } else if (_outfitsID[2] == 1128) { //Starlight Diva (Body) //atk 10 Bonus.attack += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1129) { //Starlight Diva (Body) //def 10 Bonus.defense += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1130) { //Starlight Diva (Body) //spd 10 Bonus.speed += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1131) { //Starlight Diva (Body) //int 5 Bonus.intelligence += (5 * _outfitBalance[2]); } else if (_outfitsID[2] == 1132 || _outfitsID[2] == 1133) { //Starlight Diva (Body) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (2 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } //========== Leggings====================== if (_outfitsID[3] == 1008) { //Scholar (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1009) { //Scholar (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1010) { //Scholar (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1011) { //Scholar (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1012) { //Scholar (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1013 || _outfitsID[3] == 1014) { //Scholar (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1029) { //Love Embrace (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1030) { //Love Embrace (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1031) { //Love Embrace (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1032) { //Love Embrace (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1033) { //Love Embrace (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1034 || _outfitsID[3] == 1035) { //Love Embrace (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1050) { //Celestial Harmony (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1051) { //Celestial Harmony (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1052) { //Celestial Harmony (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1053) { //Celestial Harmony (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1054) { //Celestial Harmony (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1055 || _outfitsID[3] == 1056) { //Celestial Harmony (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1071) { //Cyber Strike (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1072) { //Cyber Strike (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1073) { //Cyber Strike (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1074) { //Cyber Strike (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1075) { //Cyber Strike (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1076 || _outfitsID[3] == 1077) { //Cyber Strike (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1092) { //Serpent Tribe (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1093) { //Serpent Tribe (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1094) { //Serpent Tribe (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1095) { //Serpent Tribe (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1096) { //Serpent Tribe (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1097 || _outfitsID[3] == 1098) { //Serpent Tribe (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1113) { //Pearl Empress (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1114) { //Pearl Empress (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1115) { //Pearl Empress (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1116) { //Pearl Empress (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1117) { //Pearl Empress (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1118 || _outfitsID[3] == 1119) { //Pearl Empress (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1134) { //Starlight Diva (Leggings) //hp 100 Bonus.hp += (100 * _outfitBalance[3]); } else if (_outfitsID[3] == 1135) { //Starlight Diva (Leggings) //atk 10 Bonus.attack += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1136) { //Starlight Diva (Leggings) //def 10 Bonus.defense += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1137) { //Starlight Diva (Leggings) //spd 10 Bonus.speed += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1138) { //Starlight Diva (Leggings) //int 5 Bonus.intelligence += (5 * _outfitBalance[3]); } else if (_outfitsID[3] == 1139 || _outfitsID[3] == 1140) { //Starlight Diva (Leggings) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (2 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } //========== Boots====================== if (_outfitsID[4] == 1015) { //Scholar (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1016) { //Scholar (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1017) { //Scholar (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1018) { //Scholar (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1019) { //Scholar (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1020 || _outfitsID[4] == 1021) { //Scholar (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1036) { //Love Embrace (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1037) { //Love Embrace (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1038) { //Love Embrace (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1039) { //Love Embrace (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1040) { //Love Embrace (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1041 || _outfitsID[4] == 1042) { //Love Embrace (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1057) { //Celestial Harmony (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1058) { //Celestial Harmony (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1059) { //Celestial Harmony (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1060) { //Celestial Harmony (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1061) { //Celestial Harmony (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1062 || _outfitsID[4] == 1063) { //Celestial Harmony (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1078) { //Cyber Strike (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1079) { //Cyber Strike (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1080) { //Cyber Strike (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1081) { //Cyber Strike (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1082) { //Cyber Strike (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1083 || _outfitsID[4] == 1084) { //Cyber Strike (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1099) { //Serpent Tribe (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1100) { //Serpent Tribe (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1101) { //Serpent Tribe (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1102) { //Serpent Tribe (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1103) { //Serpent Tribe (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1104 || _outfitsID[4] == 1105) { //Serpent Tribe (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1120) { //Pearl Empress (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1121) { //Pearl Empress (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1122) { //Pearl Empress (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1123) { //Pearl Empress (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1124) { //Pearl Empress (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1125 || _outfitsID[4] == 1126) { //Pearl Empress (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1141) { //Starlight Diva (Boots) //hp 100 Bonus.hp += (100 * _outfitBalance[4]); } else if (_outfitsID[4] == 1142) { //Starlight Diva (Boots) //atk 10 Bonus.attack += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1143) { //Starlight Diva (Boots) //def 10 Bonus.defense += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1144) { //Starlight Diva (Boots) //spd 10 Bonus.speed += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1145) { //Starlight Diva (Boots) //int 5 Bonus.intelligence += (5 * _outfitBalance[4]); } else if (_outfitsID[4] == 1146 || _outfitsID[4] == 1147) { //Starlight Diva (Boots) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (2 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } for (uint i=0; i<3; i++) { if (UnitGroup[i].hp >0 ) { //not empty slot UnitGroup[i].hp = _UnitGroup[i].hp += Bonus.hp; UnitGroup[i].attack = _UnitGroup[i].attack += Bonus.attack; UnitGroup[i].defense = _UnitGroup[i].defense += Bonus.defense; UnitGroup[i].speed = _UnitGroup[i].speed += Bonus.speed; UnitGroup[i].intelligence = _UnitGroup[i].intelligence += Bonus.intelligence; } } } function readOutfitBonus (uint[5] memory _outfitsID, uint[5] memory _outfitBalance) internal pure returns (S.Unit memory Bonus) { //_outfit[0~4] is outfit ID for the trainer ID. (what to wear) ID 0 means wearing nothing //[0] = Aerobot [1] = headgear [2] = Body [3] = Leggings [4 = Boots //convert Outfit balance into Multiplier for (uint i=0; i<5; i++) { if (_outfitBalance[i] >= 4096) { _outfitBalance[i] = 5; } else if (_outfitBalance[i] >= 512) { _outfitBalance[i] = 4; } else if (_outfitBalance[i] >= 64) { _outfitBalance[i] = 3; } else if (_outfitBalance[i] >= 8) { _outfitBalance[i] = 2; } else if (_outfitBalance[i] >= 1) { _outfitBalance[i] = 1; } //otherwise = 0, multiplier =0 } //Get Bonus from each outfit //========== AEROBOT ====================== if (_outfitsID[0] == 3001) { //Bolt (Aerobot) //spd + 6 Bonus.speed += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3002) { //Pixi (Aerobot) //atk + 6 Bonus.attack += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3003) { //Finspark (Aerobot) //SPD + 10 Bonus.speed += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3004) { //Cyanite //ATK + 10 Bonus.attack += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3005) { //Daemon //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3006) { //Skye //Int +4 Bonus.intelligence += (4 * _outfitBalance[0]); } else if (_outfitsID[0] == 3007) { //Cocoon //int +3 Bonus.intelligence += (3 * _outfitBalance[0]); } else if (_outfitsID[0] == 3008) { //Orbitron //Spd +8 Bonus.speed += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3009) { //Glide //Atk +8 Bonus.attack += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3010) { //Bolt Mark II //Def + 8 Bonus.defense += (8 * _outfitBalance[0]); } else if (_outfitsID[0] == 3011) { //Lovey //Hp + 80 Bonus.hp += (80 * _outfitBalance[0]); } else if (_outfitsID[0] == 3012) { //Zetabot //hp + 60 Bonus.hp += (60 * _outfitBalance[0]); } else if (_outfitsID[0] == 3013) { //Roxie //def + 6 Bonus.defense += (6 * _outfitBalance[0]); } else if (_outfitsID[0] == 3014) { //Puzzle //INT + 5 Bonus.intelligence += (5 * _outfitBalance[0]); } else if (_outfitsID[0] == 3015) { //Aura //all (20, 2, 2, 2, 1) Bonus.hp += (20 * _outfitBalance[0]); Bonus.attack += (2 * _outfitBalance[0]); Bonus.defense += (2 * _outfitBalance[0]); Bonus.speed += (2 * _outfitBalance[0]); Bonus.intelligence += (1 * _outfitBalance[0]); } else if (_outfitsID[0] == 3016) { //Goldon //DEF + 10 Bonus.defense += (10 * _outfitBalance[0]); } else if (_outfitsID[0] == 3017) { //Meteoron //HP + 100 Bonus.hp += (100 * _outfitBalance[0]); } //========== Headgear ====================== if (_outfitsID[1] == 6001) { //headgear 1 //hp+50 Bonus.hp += (50 * _outfitBalance[1]); } else if (_outfitsID[1] == 6002) { //headgear 2 //atk+3 Bonus.attack += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6003) { //headgear 3 //def+3 Bonus.defense += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6004) { //headgear 4 //spd+3 Bonus.speed += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6005) { //headgear 5 //int+1 Bonus.intelligence += (1 * _outfitBalance[1]); } else if (_outfitsID[1] == 6006) { //headgear 6 //hp+60 Bonus.hp += (60 * _outfitBalance[1]); } else if (_outfitsID[1] == 6007) { //headgear 7 //atk+6 Bonus.attack += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6008) { //headgear 8 //def+6 Bonus.defense += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6009) { //headgear 9 //spd+6 Bonus.speed += (6 * _outfitBalance[1]); } else if (_outfitsID[1] == 6010) { //headgear 10 //int+3 Bonus.intelligence += (3 * _outfitBalance[1]); } else if (_outfitsID[1] == 6011) { //headgear 11 //hp+80 Bonus.hp += (80 * _outfitBalance[1]); } else if (_outfitsID[1] == 6012) { //headgear 12 //atk+8 Bonus.attack += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6013) { //headgear 13 //def+8 Bonus.defense += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6014) { //headgear 14 //spd+8 Bonus.speed += (8 * _outfitBalance[1]); } else if (_outfitsID[1] == 6015) { //headgear 15 //int+4 Bonus.intelligence += (4 * _outfitBalance[1]); } else if (_outfitsID[1] == 6016) { //headgear 16 //hp+100 Bonus.hp += (100 * _outfitBalance[1]); } else if (_outfitsID[1] == 6017) { //headgear 17 //atk+10 Bonus.attack += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6018) { //headgear 18 //def+10 Bonus.defense += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6019) { //headgear 19 //spd+10 Bonus.speed += (10 * _outfitBalance[1]); } else if (_outfitsID[1] == 6020) { //headgear 20 //int+5 Bonus.intelligence += (5 * _outfitBalance[1]); } //========== Body ====================== if (_outfitsID[2] == 1001) { //Scholar (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1002) { //Scholar (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1003) { //Scholar (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1004) { //Scholar (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1005) { //Scholar (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1006 || _outfitsID[2] == 1007) { //Scholar (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1022) { //Love Embrace (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1023) { //Love Embrace (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1024) { //Love Embrace (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1025) { //Love Embrace (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1026) { //Love Embrace (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1027 || _outfitsID[2] == 1028) { //Love Embrace (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1043) { //Celestial Harmony (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1044) { //Celestial Harmony (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1045) { //Celestial Harmony (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1046) { //Celestial Harmony (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1047) { //Celestial Harmony (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1048 || _outfitsID[2] == 1049) { //Celestial Harmony (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1064) { //Cyber Strike (Body) //hp 80 Bonus.hp += (80 * _outfitBalance[2]); } else if (_outfitsID[2] == 1065) { //Cyber Strike (Body) //atk 8 Bonus.attack += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1066) { //Cyber Strike (Body) //def 8 Bonus.defense += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1067) { //Cyber Strike (Body) //spd 8 Bonus.speed += (8 * _outfitBalance[2]); } else if (_outfitsID[2] == 1068) { //Cyber Strike (Body) //int 4 Bonus.intelligence += (4 * _outfitBalance[2]); } else if (_outfitsID[2] == 1069 || _outfitsID[2] == 1070) { //Cyber Strike (Body) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1085) { //Serpent Tribe (Body) //hp 50 Bonus.hp += (50 * _outfitBalance[2]); } else if (_outfitsID[2] == 1086) { //Serpent Tribe (Body) //atk 3 Bonus.attack += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1087) { //Serpent Tribe (Body) //def 3 Bonus.defense += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1088) { //Serpent Tribe (Body) //spd 3 Bonus.speed += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1089) { //Serpent Tribe (Body) //int 1 Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1090 || _outfitsID[2] == 1091) { //Serpent Tribe (Body) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[2]); Bonus.attack += (1 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1106) { //Pearl Empress (Body) //hp 60 Bonus.hp += (60 * _outfitBalance[2]); } else if (_outfitsID[2] == 1107) { //Pearl Empress (Body) //atk 6 Bonus.attack += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1108) { //Pearl Empress (Body) //def 6 Bonus.defense += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1109) { //Pearl Empress (Body) //spd 6 Bonus.speed += (6 * _outfitBalance[2]); } else if (_outfitsID[2] == 1110) { //Pearl Empress (Body) //int 3 Bonus.intelligence += (3 * _outfitBalance[2]); } else if (_outfitsID[2] == 1111 || _outfitsID[2] == 1112) { //Pearl Empress (Body) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (1 * _outfitBalance[2]); Bonus.speed += (1 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } else if (_outfitsID[2] == 1127) { //Starlight Diva (Body) //hp 100 Bonus.hp += (100 * _outfitBalance[2]); } else if (_outfitsID[2] == 1128) { //Starlight Diva (Body) //atk 10 Bonus.attack += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1129) { //Starlight Diva (Body) //def 10 Bonus.defense += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1130) { //Starlight Diva (Body) //spd 10 Bonus.speed += (10 * _outfitBalance[2]); } else if (_outfitsID[2] == 1131) { //Starlight Diva (Body) //int 5 Bonus.intelligence += (5 * _outfitBalance[2]); } else if (_outfitsID[2] == 1132 || _outfitsID[2] == 1133) { //Starlight Diva (Body) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[2]); Bonus.attack += (2 * _outfitBalance[2]); Bonus.defense += (2 * _outfitBalance[2]); Bonus.speed += (2 * _outfitBalance[2]); Bonus.intelligence += (1 * _outfitBalance[2]); } //========== Leggings====================== if (_outfitsID[3] == 1008) { //Scholar (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1009) { //Scholar (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1010) { //Scholar (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1011) { //Scholar (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1012) { //Scholar (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1013 || _outfitsID[3] == 1014) { //Scholar (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1029) { //Love Embrace (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1030) { //Love Embrace (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1031) { //Love Embrace (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1032) { //Love Embrace (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1033) { //Love Embrace (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1034 || _outfitsID[3] == 1035) { //Love Embrace (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1050) { //Celestial Harmony (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1051) { //Celestial Harmony (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1052) { //Celestial Harmony (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1053) { //Celestial Harmony (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1054) { //Celestial Harmony (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1055 || _outfitsID[3] == 1056) { //Celestial Harmony (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1071) { //Cyber Strike (Leggings) //hp 80 Bonus.hp += (80 * _outfitBalance[3]); } else if (_outfitsID[3] == 1072) { //Cyber Strike (Leggings) //atk 8 Bonus.attack += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1073) { //Cyber Strike (Leggings) //def 8 Bonus.defense += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1074) { //Cyber Strike (Leggings) //spd 8 Bonus.speed += (8 * _outfitBalance[3]); } else if (_outfitsID[3] == 1075) { //Cyber Strike (Leggings) //int 4 Bonus.intelligence += (4 * _outfitBalance[3]); } else if (_outfitsID[3] == 1076 || _outfitsID[3] == 1077) { //Cyber Strike (Leggings) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1092) { //Serpent Tribe (Leggings) //hp 50 Bonus.hp += (50 * _outfitBalance[3]); } else if (_outfitsID[3] == 1093) { //Serpent Tribe (Leggings) //atk 3 Bonus.attack += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1094) { //Serpent Tribe (Leggings) //def 3 Bonus.defense += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1095) { //Serpent Tribe (Leggings) //spd 3 Bonus.speed += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1096) { //Serpent Tribe (Leggings) //int 1 Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1097 || _outfitsID[3] == 1098) { //Serpent Tribe (Leggings) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[3]); Bonus.attack += (1 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1113) { //Pearl Empress (Leggings) //hp 60 Bonus.hp += (60 * _outfitBalance[3]); } else if (_outfitsID[3] == 1114) { //Pearl Empress (Leggings) //atk 6 Bonus.attack += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1115) { //Pearl Empress (Leggings) //def 6 Bonus.defense += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1116) { //Pearl Empress (Leggings) //spd 6 Bonus.speed += (6 * _outfitBalance[3]); } else if (_outfitsID[3] == 1117) { //Pearl Empress (Leggings) //int 3 Bonus.intelligence += (3 * _outfitBalance[3]); } else if (_outfitsID[3] == 1118 || _outfitsID[3] == 1119) { //Pearl Empress (Leggings) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (1 * _outfitBalance[3]); Bonus.speed += (1 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } else if (_outfitsID[3] == 1134) { //Starlight Diva (Leggings) //hp 100 Bonus.hp += (100 * _outfitBalance[3]); } else if (_outfitsID[3] == 1135) { //Starlight Diva (Leggings) //atk 10 Bonus.attack += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1136) { //Starlight Diva (Leggings) //def 10 Bonus.defense += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1137) { //Starlight Diva (Leggings) //spd 10 Bonus.speed += (10 * _outfitBalance[3]); } else if (_outfitsID[3] == 1138) { //Starlight Diva (Leggings) //int 5 Bonus.intelligence += (5 * _outfitBalance[3]); } else if (_outfitsID[3] == 1139 || _outfitsID[3] == 1140) { //Starlight Diva (Leggings) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[3]); Bonus.attack += (2 * _outfitBalance[3]); Bonus.defense += (2 * _outfitBalance[3]); Bonus.speed += (2 * _outfitBalance[3]); Bonus.intelligence += (1 * _outfitBalance[3]); } //========== Boots====================== if (_outfitsID[4] == 1015) { //Scholar (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1016) { //Scholar (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1017) { //Scholar (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1018) { //Scholar (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1019) { //Scholar (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1020 || _outfitsID[4] == 1021) { //Scholar (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1036) { //Love Embrace (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1037) { //Love Embrace (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1038) { //Love Embrace (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1039) { //Love Embrace (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1040) { //Love Embrace (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1041 || _outfitsID[4] == 1042) { //Love Embrace (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1057) { //Celestial Harmony (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1058) { //Celestial Harmony (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1059) { //Celestial Harmony (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1060) { //Celestial Harmony (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1061) { //Celestial Harmony (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1062 || _outfitsID[4] == 1063) { //Celestial Harmony (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1078) { //Cyber Strike (Boots) //hp 80 Bonus.hp += (80 * _outfitBalance[4]); } else if (_outfitsID[4] == 1079) { //Cyber Strike (Boots) //atk 8 Bonus.attack += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1080) { //Cyber Strike (Boots) //def 8 Bonus.defense += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1081) { //Cyber Strike (Boots) //spd 8 Bonus.speed += (8 * _outfitBalance[4]); } else if (_outfitsID[4] == 1082) { //Cyber Strike (Boots) //int 4 Bonus.intelligence += (4 * _outfitBalance[4]); } else if (_outfitsID[4] == 1083 || _outfitsID[4] == 1084) { //Cyber Strike (Boots) //all (16,2,2,1,1) Bonus.hp += (16 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1099) { //Serpent Tribe (Boots) //hp 50 Bonus.hp += (50 * _outfitBalance[4]); } else if (_outfitsID[4] == 1100) { //Serpent Tribe (Boots) //atk 3 Bonus.attack += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1101) { //Serpent Tribe (Boots) //def 3 Bonus.defense += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1102) { //Serpent Tribe (Boots) //spd 3 Bonus.speed += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1103) { //Serpent Tribe (Boots) //int 1 Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1104 || _outfitsID[4] == 1105) { //Serpent Tribe (Boots) //all (10,1,1,1,1) Bonus.hp += (10 * _outfitBalance[4]); Bonus.attack += (1 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1120) { //Pearl Empress (Boots) //hp 60 Bonus.hp += (60 * _outfitBalance[4]); } else if (_outfitsID[4] == 1121) { //Pearl Empress (Boots) //atk 6 Bonus.attack += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1122) { //Pearl Empress (Boots) //def 6 Bonus.defense += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1123) { //Pearl Empress (Boots) //spd 6 Bonus.speed += (6 * _outfitBalance[4]); } else if (_outfitsID[4] == 1124) { //Pearl Empress (Boots) //int 3 Bonus.intelligence += (3 * _outfitBalance[4]); } else if (_outfitsID[4] == 1125 || _outfitsID[4] == 1126) { //Pearl Empress (Boots) //all (12,2,1,1,1) Bonus.hp += (12 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (1 * _outfitBalance[4]); Bonus.speed += (1 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } else if (_outfitsID[4] == 1141) { //Starlight Diva (Boots) //hp 100 Bonus.hp += (100 * _outfitBalance[4]); } else if (_outfitsID[4] == 1142) { //Starlight Diva (Boots) //atk 10 Bonus.attack += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1143) { //Starlight Diva (Boots) //def 10 Bonus.defense += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1144) { //Starlight Diva (Boots) //spd 10 Bonus.speed += (10 * _outfitBalance[4]); } else if (_outfitsID[4] == 1145) { //Starlight Diva (Boots) //int 5 Bonus.intelligence += (5 * _outfitBalance[4]); } else if (_outfitsID[4] == 1146 || _outfitsID[4] == 1147) { //Starlight Diva (Boots) //all (20,2,2,2,1) Bonus.hp += (20 * _outfitBalance[4]); Bonus.attack += (2 * _outfitBalance[4]); Bonus.defense += (2 * _outfitBalance[4]); Bonus.speed += (2 * _outfitBalance[4]); Bonus.intelligence += (1 * _outfitBalance[4]); } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: FINALdeployFA/INTERFACE - StorageV2.sol pragma solidity ^0.8.20; // Import your custom structs /** * @title IFARPG_Storage * @dev Interface for FARPG_Storage so other contracts can call it */ interface IFARPG_Storage { //------------------------------------------------------------------------- // Administrative / Master Contract Access //------------------------------------------------------------------------- function owner() external view returns (address); function masterContracts(uint index) external view returns (address); function masterIndex(address) external view returns (uint); function addMasterContract(address _address, uint _index) external; function addMasterContractBatch(address[] memory _addresses, uint[] memory _indices) external; function removeMasterContract(uint _index) external; function getAllMasterContracts() external view returns (address[] memory, uint[] memory); //------------------------------------------------------------------------- // UID Management //------------------------------------------------------------------------- function UIDmain(address) external view returns (uint); function UID_ownedby(uint) external view returns (address); function UIDcounter() external view returns (uint); function getUID(address player) external view returns (uint _UID); function transferUID(address player, address newplayerwallet) external; function registerUID(address player) external; function setUIDmain (address playerAddress, uint UID) external; function setUID_ownedby (uint UID, address playerAddress) external; //------------------------------------------------------------------------- // Quest (setters) //------------------------------------------------------------------------- function setMainQuest(address player, uint index, uint8 progress) external; function setSideQuest(address player, uint index, uint8 progress) external; function setPremiumScore(address player, uint score) external; function setPlayerGeneStrength(address player, uint index, uint strength) external; function setPlayerVitamin(address player, uint index, uint amount) external; //------------------------------------------------------------------------- // Quest (getters) //------------------------------------------------------------------------- function getMainQuestProgress(address player, uint index) external view returns (uint8); function getSideQuestProgress(address player, uint index) external view returns (uint8); function getPremiumScore(address player) external view returns (uint); function getPlayerQuestAndScore(address player, uint index) external view returns (uint, uint, uint); function getMainQuestProgressArray(address player) external view returns (uint8[64] memory); function getSideQuestProgressArray(address player) external view returns (uint8[64] memory); //------------------------------------------------------------------------- // Player Stats (setters) //------------------------------------------------------------------------- function setPersonalWallet(address player, address personal) external; function setGiveControlTo(address player, address web2wallet) external; function setExp(address player, uint experience) external; function setRankScore(address player, uint score) external; function setEnergy1(address player, uint energy) external; function setEnergy2(address player, uint energy) external; function setEnergy22(address player, uint energy) external; function setEnergy3(address player, uint energy) external; function setTeamFormat(address player, uint[60] calldata format) external; function setUsernameToUID(string memory username, uint _UID) external; function setUIDToUsername(uint _UID, string memory username) external; function deleteUsernameToAddress (string memory username) external; // Points function setPoint1(address player, uint point) external; function setPoint2(address player, uint point) external; function setPoint3(address player, uint point) external; function setPoint4(address player, uint point) external; function setPoint5(address player, uint point) external; function addPoint1(address player, uint point) external; function addPoint2(address player, uint point) external; function addPoint3(address player, uint point) external; function addPoint4(address player, uint point) external; function addPoint5(address player, uint point) external; //------------------------------------------------------------------------- // Player Stats (getters) //------------------------------------------------------------------------- function personalwallet(address) external view returns (address); function givecontrolto(address) external view returns (address); function getExperience(address player) external view returns (uint); function getRankingScore(address player) external view returns (uint); function getEnergy1(address player) external view returns (uint); function getEnergy2(address player) external view returns (uint); function getEnergy22(address player) external view returns (uint); function getEnergy3(address player) external view returns (uint); function getPlayerStats(address player) external view returns (uint, uint, uint, uint, uint, uint); function UIDToUsername(uint) external view returns (string memory); function usernameToUID(string memory) external view returns (uint); function getPoint1(address player) external view returns (uint); function getPoint2(address player) external view returns (uint); function getPoint3(address player) external view returns (uint); function getPoint4(address player) external view returns (uint); function getPoint5(address player) external view returns (uint); function getPlayerPoints(address player) external view returns (uint, uint, uint, uint, uint); function getPlayergenestrengthArray(address player) external view returns (uint[50] memory); function getPlayerGeneStrength(address player, uint index) external view returns (uint); function getPlayervitaminArray(address player) external view returns (uint[50] memory); function getPlayerVitamin(address player, uint index) external view returns (uint); //------------------------------------------------------------------------- // Limits (setters) //------------------------------------------------------------------------- function setLimit1(address player, uint limit) external; function setLimit2(address player, uint limit) external; function setLimit3(address player, uint limit) external; function setTimebound1(address player, uint timestamp) external; function setTimebound2(address player, uint timestamp) external; function setTimebound3(address player, uint timestamp) external; //------------------------------------------------------------------------- // Limits (getters) //------------------------------------------------------------------------- function getLimit1(address player) external view returns (uint); function getLimit2(address player) external view returns (uint); function getLimit3(address player) external view returns (uint); function getTimebound1(address player) external view returns (uint); function getTimebound2(address player) external view returns (uint); function getTimebound3(address player) external view returns (uint); function getPlayerLimits(address player) external view returns (uint, uint, uint, uint, uint, uint); //------------------------------------------------------------------------- // Numberset (setters) //------------------------------------------------------------------------- function setNumberSet1(address player, uint[6] memory number) external; function setNumberSet2(address player, uint[5] memory number) external; function setNumberSet3(address player, uint[5] memory number) external; function setNumberSet4(address player, uint[5] memory number) external; function setNumberSet5(address player, uint[5] memory number) external; function setNumberSet6(address player, uint[5] memory number) external; function setNumberSet7(address player, uint[5] memory number) external; function setNumberSet8(address player, uint[5] memory number) external; function setNumberSet9(address player, uint[5] memory number) external; function setNumberSetA(address player, uint[5] memory number) external; function setNumberSetB(address player, uint[5] memory number) external; function setNumberSetC(address player, uint[5] memory number) external; function setNumberSetD(address player, uint[5] memory number) external; function setNumberSetE(address player, uint[10] memory number) external; function setNumberSetF(address player, uint[10] memory number) external; function setNumberSetG(address player, uint[10] memory number) external; function setNumberSetH(address player, uint[10] memory number) external; //------------------------------------------------------------------------- // Numberset (getters) //------------------------------------------------------------------------- function getNumberSet1(address player) external view returns (uint[6] memory); function getNumberSet2(address player) external view returns (uint[5] memory); function getNumberSet3(address player) external view returns (uint[5] memory); function getNumberSet4(address player) external view returns (uint[5] memory); function getNumberSet5(address player) external view returns (uint[5] memory); function getNumberSet6(address player) external view returns (uint[5] memory); function getNumberSet7(address player) external view returns (uint[5] memory); function getNumberSet8(address player) external view returns (uint[5] memory); function getNumberSet9(address player) external view returns (uint[5] memory); function getNumberSetA(address player) external view returns (uint[5] memory); function getNumberSetB(address player) external view returns (uint[5] memory); function getNumberSetC(address player) external view returns (uint[5] memory); function getNumberSetD(address player) external view returns (uint[5] memory); function getNumberSetE(address player) external view returns (uint[10] memory); function getNumberSetF(address player) external view returns (uint[10] memory); function getNumberSetG(address player) external view returns (uint[10] memory); function getNumberSetH(address player) external view returns (uint[10] memory); //------------------------------------------------------------------------- // PVP Ranks //------------------------------------------------------------------------- struct Player { uint256 rankPoints; uint256 league; uint256 indexInLeague; // Index of the player within their league array } function setPlayers(address player, Player memory rankpointleagueindexinleague) external; function setReset_Time_Attempts(address player, uint[2] memory resettimeattemps) external; function setEligible_Opponents(address player, address[5] memory eligibleOppo) external; function setFaught_Opponents(address player, uint[5] memory faughtOppo) external; function setDefending_Formation(address player, uint[3] memory defendingslot) external; function getPlayers(address player) external view returns (Player memory ) ; function getReset_Time_Attempts(address player ) external view returns (uint[2] memory ); function getEligible_Opponents(address player ) external view returns (address[5] memory); function getFaught_Opponents(address player ) external view returns(uint[5] memory) ; function getDefending_Formation(address player) external view returns (uint[3] memory ); //------------------------------------------------------------------------- // Pet data (setters) //------------------------------------------------------------------------- function setPetUnits(address player, uint index, S.Unit memory newUnit) external; function setPetUnitsMaxVitamined(address player, uint index, S.Unit memory newUnit) external; function setPetStatuses(address player, uint index, S.Status memory newStatus) external; function setPetTimes(address player, uint index, S.Time memory newTime) external; //------------------------------------------------------------------------- // Pet data (getters) //------------------------------------------------------------------------- function getPetUnitsAll(address player) external view returns (S.Unit[500] memory); function getPetUnits(address player, uint _index) external view returns (S.Unit memory); function getPetUnitsMaxVitaminedAll(address player) external view returns (S.Unit[500] memory); function getPetUnitsMaxVitamined(address player, uint _index) external view returns (S.Unit memory); function getPetStatusesAll(address player) external view returns (S.Status[500] memory); function getPetStatuses(address player, uint _index) external view returns (S.Status memory); function getPetTimesAll(address player) external view returns (S.Time[500] memory); function getPetTimes(address player, uint _index) external view returns (S.Time memory); //------------------------------------------------------------------------- // Party / Outfit //------------------------------------------------------------------------- function setPartyFormation(address player, uint[30] memory slots) external; function setTrainerOutfitPosition(address player, uint[150] memory outfitIds) external; function getPartyFormation(address player) external view returns (uint[30] memory); function getAllOutfits(address player) external view returns (uint[150] memory); //------------------------------------------------------------------------- // Trainer Gene Infusing //------------------------------------------------------------------------- function setTrainerGeneInfusingGene(address player, uint index, uint value) external; function setTrainerGeneInfusingGeneAll(address player, uint[50] memory newData) external; function setTrainerGeneInfusingTimer(address player, uint index, uint value) external; function setTrainerGeneInfusingTimerAll(address player, uint[50] memory newData) external; function getTrainerGeneInfusingGeneAll(address player) external view returns (uint[50] memory) ; function getTrainerGeneInfusingTimerAll(address player) external view returns (uint[50] memory); function getTrainerGeneInfusingGene(address player, uint Index)external view returns (uint ) ; function getTrainerGeneInfusingTimer(address player, uint Index)external view returns (uint ); //------------------------------------------------------------------------- // Additional Utility //------------------------------------------------------------------------- function getBattleUnit3(address player, uint[3] calldata slots) external view returns (S.Unit[3] memory Units3, uint[3] memory UnitIds); function getSlotUnitMore(address player, uint startindex, uint stopindex) external view returns (S.Unit[] memory Units, uint[] memory UnitIds); function getTeamFormat(address _addr) external view returns (uint[60] memory); //------------------------------------------------------------------------- // Weather System //------------------------------------------------------------------------- function getWeatherUnity() external view returns (uint _weather, uint _daylight, uint _blocktime); function getWeatherBattle(uint _timenow) external view returns (uint _weather); function setWeatherConstants(uint[12] memory _weatherIndices) external; function getWeatherIndexConstants() external view returns (uint[] memory); } // File: FINALdeployFA/PUBLIC - QuestSystemV1.sol pragma solidity ^0.8.19; //_______________________________________________________________ // ___ __ __ _ ___ _ ___ _ __ // | _ )\ \ / / _ | | / _ \ _ | | / _ \ (_)\ \ // | _ \ \ V / | || || (_) || || || (_) | _ | | // |___/ |_| \__/ \___/ \__/ \___/ ( ) | | // |/ /_/ //_______________________________________________________________ // Interface for accessing Storage //------------------------------------------------------------------- // _____ _ _ _______ ______ _____ ______ _____ ______ // |_ _| \ | |__ __| ____| __ \| ____/\ / ____| ____| // | | | \| | | | | |__ | |__) | |__ / \ | | | |__ // | | | . ` | | | | __| | _ /| __/ /\ \| | | __| // _| |_| |\ | | | | |____| | \ \| | / ____ \ |____| |____ // |_____|_| \_| |_| |______|_| \_\_|/_/ \_\_____|______| // //------------------------------------------------------------------- interface BattleV4 { //enum Weather { Sunny, Cloudy, Rainy, Thunderstorm, Snowy, Aurora, BloodMoon, NONE } function BattleV4_3v3(S.Unit[6] memory _UnitGroup) external returns (uint BattleRhythm, uint bit, bool Won, uint randret); function Calibrate(uint index) external returns (uint, uint, bool, uint); } interface FARPG_RAMInterface { // Read functions struct TrainerData { uint gene; uint[50] genestrength; uint hashed; } function genetoid_mapping(uint trainergene) external pure returns (uint); function petunitsmax(uint id) external pure returns (S.Unit calldata); function petunitsevolveid(S.Status calldata _status, S.Unit calldata _Unit, TrainerData calldata _trainerData) external pure returns (S.Status memory , uint ); } contract FARPG_QuestSystemV1 is Ownable , ReentrancyGuard { IFARPG_Storage public contractStorage; FARPG_RAMInterface public contractRAM; BattleV4 public Battle; constructor() { } event StatChangedResult(S.Unit AfterUnit, S.Status AfterStatus, S.Time AfterTime); event BattleResultV2(uint BattleRythm, uint bit, bool Won, uint randret, S.Unit[6] unitgroup,uint[3] oponentid, uint[3] attackerid); //------------------------------------------------------------------- // _____ _ ____ ____ _ __ __ // / ____| | / __ \| _ \ /\ | | \ \ / / // | | __| | | | | | |_) | / \ | | \ \ / / // | | |_ | | | | | | _ < / /\ \ | | \ \/ / // | |__| | |___| |__| | |_) / ____ \| |____ \ / _ // \_____|______\____/|____/_/ \_\______| \/ (_) // //------------------------------------------------------------------- uint private QuesttoQuestDelay3 = 3 seconds; //prevent a bot to finish the quest too fast uint private QuesttoQuestDelay10 = 10 seconds; //prevent a bot to finish the quest too fast mapping (address => uint) private reentrant_time; uint constant PRICE_TOOPENBOX = 5 ether; //dont have to change, as this will not happened since First quest only run once. Even is, that is attempt to exploit. 5 FTM will prevent that. uint constant TIME_INITIALSTAMINA = 24 hours; //initial stamina uint constant TIME_INITIALENDURANCE = 3 hours; //initial endurance/hunger string constant MESSAGE_STANDARDQUESTCONDITIONUNMATCHED = "Quest requirement unmatched."; //--------------------------------------------------------- // _____ __ __ _____ _ _ // /\ | __ \| \/ |_ _| \ | | // / \ | | | | \ / | | | | \| | // / /\ \ | | | | |\/| | | | | . ` | // / ____ \| |__| | | | |_| |_| |\ | // /_/ \_\_____/|_| |_|_____|_| \_| // //--------------------------------------------------------- function updateStorageContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractStorage = IFARPG_Storage(_newContractAAddress); } function updateRAMContractAAddress(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); contractRAM = FARPG_RAMInterface(_newContractAAddress); } function updateBattleV4Address(address _newContractAAddress) external onlyOwner { require(_newContractAAddress != address(0), "Invalid address"); Battle = BattleV4(_newContractAAddress); } function withdraw() external onlyOwner { // Function to withdraw all balance from the contract for revenue require(address(this).balance > 0, "Contract balance is zero"); payable(msg.sender).transfer(address(this).balance); } //--------------------------------------------------------- // // _____ _______ _____ _______ // / ____|__ __|/\ | __ \__ __| // | (___ | | / \ | |__) | | | // \___ \ | | / /\ \ | _ / | | // ____) | | |/ ____ \| | \ \ | | // |_____/ |_/_/ \_\_| \_\ |_| // //--------------------------------------------------------- //--------- sub functions --------------- function accountAddressToProceed() public view returns (address) { // Ready for account abstraction // If the player doesn't provide a personal wallet, all data will be recorded in the trainer wallet address playerAddress = contractStorage.personalwallet(msg.sender); if (playerAddress == address(0)) { return msg.sender; } else { return playerAddress; } } modifier onlyEOA() { require(!isContract(msg.sender), "Smart contracts not allowed"); _; } function noneReentrant_time(address player, uint delay) internal { require(reentrant_time[player] < block.timestamp ,"Spam prevention activated."); reentrant_time[player] = block.timestamp + delay; } function isContract(address _addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_addr) } return size > 0; } function openBoxIn24Hr_paid() public view returns (uint boxOpened, uint remainingTimeReset_s, uint pricePerBox) { //check the timenow and minted 0th box whether the limit has reset address playerAddress = accountAddressToProceed(); uint timeElapsed = block.timestamp - contractStorage.getTimebound1(playerAddress); if (timeElapsed >= 24 hours) { //over the TIME limit for 0th box open boxOpened = 0; remainingTimeReset_s = 0; } else { //still within TIME limit since last 0th box opened boxOpened = contractStorage.getLimit1(playerAddress); remainingTimeReset_s = 24 hours - timeElapsed; pricePerBox = PRICE_TOOPENBOX*boxOpened; } } /////////////////////////////////////// QUEST START ////////////////////////////////////////////////////////////////// function Q1_1JojoTranscended() public nonReentrant { address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam contractStorage.registerUID(playerAddress); require(contractStorage.getMainQuestProgress(playerAddress,1) == 0,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- uint jojoStrength = contractStorage.getPlayerGeneStrength(playerAddress,0); contractStorage.setPlayerGeneStrength(playerAddress, 0, jojoStrength+1); contractStorage.setMainQuest(playerAddress,1,1); //done the quest } function Q1_2GetFirstLings(uint slot, uint trainergene) public payable nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,2); //done the quest uint limit2 = contractStorage.getLimit2(playerAddress); //limit2 is slot limit uint genestrength = contractStorage.getPlayerGeneStrength(playerAddress,trainergene); uint _timenow = block.timestamp; //check to see the chosen slot has occupied or exceed the slotlimit S.Status memory _petstatus = contractStorage.getPetStatuses(playerAddress, slot); if (limit2 == 0) { limit2 = 5; contractStorage.setLimit2(playerAddress, limit2); //initialize for the limit2 since its a new player } require(slot < limit2, "Chosen slot exceeds limit."); require(_petstatus.id == 0, "Chosen slot is occupied."); require(trainergene == 0, "must be Jojo."); //prevent exploit to get 1 day 2 limited Lings (Quest and Free) S.Unit memory _petunit = S.Unit({ hp: 1000, attack: 100, defense: 50, speed: 100, intelligence: 100, genestrength: genestrength, range: 0, special: 0}); _petstatus = S.Status({id: contractRAM.genetoid_mapping(trainergene), family: trainergene + 1 , stage: 1}); S.Time memory _pettime = S.Time({bond: 0, stamina: _timenow - TIME_INITIALSTAMINA, hunger: _timenow + TIME_INITIALENDURANCE}); contractStorage.setPetUnits(playerAddress, slot ,_petunit); contractStorage.setPetStatuses(playerAddress,slot , _petstatus); contractStorage.setPetTimes(playerAddress, slot ,_pettime); contractStorage.setPetUnitsMaxVitamined(playerAddress, slot ,contractRAM.petunitsmax(_petstatus.id)); uint GENEbit = contractStorage.getPoint2(playerAddress); GENEbit |= (1 << (_petstatus.id%10000)); //DO not minus 1 bit as no shinning check contractStorage.setPoint2(playerAddress,GENEbit); emit StatChangedResult(_petunit,_petstatus,_pettime); } /////////////// FEED AND TRAIN PET TUTORIAL /////////////////////// uint constant REENTRANT_TIMELIMIT = 2 seconds; // default 2 seconds. means u cannot run the nonreentrant functions >1 time within 3 seconds. uint constant PET_STAMINA_MAX = 24 hours; //maximum stamina even rested for so long uint constant PET_HUNGER_MAX = 24 hours; // if a pet left for very long time. the MAX hunger should be... uint constant ROOKIETOMATURE_BOND = 35 hours; // if Bond more than this, evolve. BUT it is Stamina + Hunger, thus 48hr per day, open Box gave 24+21= 45 hours uint constant MATURETOPERFECT_BOND = 81 hours; // on evolved, you gain max stamina and initial hunger again, means 45hours again. //////////////////////////////// sub functions /////////////////// struct PetData { //resolve stack too deep S.Status petstatuses; S.Unit petunits; S.Time pettimes; S.Unit petunitsmax; } function UnitUpdateStats(S.Unit memory petunits, S.Unit memory petunitsmax , uint stats_type, uint rate) internal pure returns (S.Unit memory petunitsout){ //************* rate in 100% = 1000 *********** petunitsout = petunits; if (stats_type == 0) { //hp if (petunitsmax.hp > petunits.hp) { //no overflow petunitsout.hp = petunits.hp + ((petunitsmax.hp - petunits.hp)*rate)/1000; } else {petunitsout.hp = petunitsmax.hp;} } else if (stats_type == 1) { // atk if (petunitsmax.attack > petunits.attack) { //no overflow petunitsout.attack = petunits.attack + ((petunitsmax.attack - petunits.attack)*rate)/1000; } else {petunitsout.attack = petunitsmax.attack;} } else if (stats_type == 2) { // def if (petunitsmax.defense > petunits.defense) { //no overflow petunitsout.defense = petunits.defense + ((petunitsmax.defense - petunits.defense)*rate)/1000; } else {petunitsout.defense = petunitsmax.defense;} } else if (stats_type == 3) { // spd if (petunitsmax.speed > petunits.speed) { //no overflow petunitsout.speed = petunits.speed + ((petunitsmax.speed - petunits.speed)*rate)/1000; } else {petunitsout.speed = petunitsmax.speed;} } else if (stats_type == 4) { // int if (petunitsmax.intelligence > petunits.intelligence) { //no overflow petunitsout.intelligence = petunits.intelligence + ((petunitsmax.intelligence - petunits.intelligence)*rate)/1000; } else {petunitsout.intelligence = petunitsmax.intelligence;} } } function feedPet(uint _slot, uint _foodtype, uint _trainergene) internal { address playerAddress = accountAddressToProceed(); uint genestrength = contractStorage.getPlayerGeneStrength(playerAddress,_trainergene); require(genestrength > 0, "Don't have the gene."); //} PetData memory Lings; Lings.petstatuses = contractStorage.getPetStatuses(playerAddress,_slot); Lings.petunits = contractStorage.getPetUnits(playerAddress,_slot); Lings.pettimes = contractStorage.getPetTimes(playerAddress,_slot); Lings.petunitsmax = contractStorage.getPetUnitsMaxVitamined(playerAddress,_slot); uint _exp = contractStorage.getExperience(playerAddress); uint _full; //determine how full is the food after eaten in time uint _partialstat; // partial stat gain only. 100% = 10000 uint _timenow = block.timestamp; require (Lings.petstatuses.id != 0, "empty slot"); require(_foodtype <= 10, "Invalid food type"); if (_foodtype==0){_full = 6 hours;} //backpack food else if (_foodtype==1){_full = 12 hours; } //shop1 else if (_foodtype==2){_full = 10 hours; } else if (_foodtype==3){_full = 10 hours; } else if (_foodtype==4){_full = 11 hours; } //shop1.1 else if (_foodtype==5){_full = 11 hours; } else if (_foodtype==6){_full = 24 hours; } //shop2 else if (_foodtype==7){_full = 24 hours; } else if (_foodtype==8){_full = 24 hours; } else if (_foodtype==9){_full = 24 hours; } //shop2.2 else if (_foodtype==10){_full = 24 hours; } if (Lings.pettimes.hunger < _timenow) { //super hungry, endurance = 0 Lings.pettimes.bond = Lings.pettimes.bond + _full; _exp += _full; Lings.pettimes.hunger = _timenow + _full; _partialstat= 10; // 100% = 10 } else if (Lings.pettimes.hunger - _timenow + _full> PET_HUNGER_MAX) { //over feed, gain partial stat uint fullhittingcap = (PET_HUNGER_MAX- (Lings.pettimes.hunger - _timenow)); Lings.pettimes.bond = Lings.pettimes.bond + fullhittingcap; _exp += fullhittingcap; _partialstat = (fullhittingcap*10)/ (_full); //100 = 1 = 100% (upscale 2 0) //this has to run last otherwise alter the hunger variable for above Lings.pettimes.hunger = _timenow + PET_HUNGER_MAX; } else { //no over feed. stat gain all Lings.pettimes.bond = Lings.pettimes.bond + _full; _exp += _full; Lings.pettimes.hunger = Lings.pettimes.hunger + _full; _partialstat= 10; // 100% = 10 } if (_foodtype==0){} //backpack food else if (_foodtype==1){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,10*_partialstat);} //hp + 10% //shop1 else if (_foodtype==2){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,5*_partialstat);} //atk + 5% else if (_foodtype==3){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,5*_partialstat);} //def + 5% else if (_foodtype==4){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,5*_partialstat);} //spd + 5% //shop1.1 else if (_foodtype==5){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,5*_partialstat);} //int + 5% else if (_foodtype==6){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,19*_partialstat);} //hp + 19% //shop2 else if (_foodtype==7){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,11*_partialstat);} //atk + 11% else if (_foodtype==8){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,11*_partialstat);} //def + 11% else if (_foodtype==9){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,11*_partialstat);} //spd + 11% //shop2.2 else if (_foodtype==10){Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,11*_partialstat);} //int + 11% //*************** check evolve ************** if ((Lings.petstatuses.stage == 1 && Lings.pettimes.bond > ROOKIETOMATURE_BOND)|| //check if rookie, then to mature (Lings.petstatuses.stage == 2 && Lings.pettimes.bond > MATURETOPERFECT_BOND)) { // check if mature, then to perfect //evolve id and maxstats //this need from RAM as update each patch FARPG_RAMInterface.TrainerData memory _trainerdata; _trainerdata.gene = _trainergene; _trainerdata.genestrength = contractStorage.getPlayergenestrengthArray(playerAddress); _trainerdata.hashed = uint(keccak256(abi.encodePacked(playerAddress,block.timestamp,block.prevrandao))); uint compiledGenestrength; (Lings.petstatuses, compiledGenestrength)= contractRAM.petunitsevolveid(Lings.petstatuses,Lings.petunits, _trainerdata); contractStorage.setPetStatuses(playerAddress,_slot , Lings.petstatuses); //update: ID, family, stage Lings.pettimes = S.Time({bond: Lings.pettimes.bond, stamina: _timenow - TIME_INITIALSTAMINA, hunger: _timenow + TIME_INITIALENDURANCE}); contractStorage.setPetTimes(playerAddress, _slot ,Lings.pettimes); //update: bond for evolve, stamina, hunger Lings.petunitsmax = contractRAM.petunitsmax(Lings.petstatuses.id); //use new id to get max stat, no genestrength and skills yet contractStorage.setPetUnitsMaxVitamined(playerAddress, _slot, Lings.petunitsmax); //evolve gain all stats by 30% Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,300); //gain new skill, with training stats above if (Lings.petstatuses.stage == 2) {//evolved into Mature Lings.petstatuses.id += 1; //add 1 to minus 1 back to retain consistent gas. if (Lings.petstatuses.id > 10000) { //if its shinning, normalized it first for skill Lings.petunits.range = Lings.petstatuses.id - 10001; } else { Lings.petunits.range = Lings.petstatuses.id - 1; } } if (Lings.petstatuses.stage == 3) { Lings.petstatuses.id += 1; //add 1 to minus 1 back to retain consistent gas. if (Lings.petstatuses.id > 10000) { //if its shinning, normalized it first for skill Lings.petunits.special = Lings.petstatuses.id - 10001; } else { Lings.petunits.special = Lings.petstatuses.id - 1; } } contractStorage.setPetUnits(playerAddress, _slot , Lings.petunits); //final write into petUnits (stats, genestrength, skills) uint GENEbit = contractStorage.getPoint2(playerAddress); // Set the bit at the position corresponding to ID GENEbit |= (1 << ((Lings.petstatuses.id-1)%10000));//need to minus 1 bit because of previous add on shinning check contractStorage.setPoint2(playerAddress,GENEbit); } else { contractStorage.setPetUnits(playerAddress, _slot , Lings.petunits); contractStorage.setPetTimes(playerAddress, _slot ,Lings.pettimes); } //************** check evolve end ****************** contractStorage.setExp(playerAddress, _exp); emit StatChangedResult(Lings.petunits,Lings.petstatuses,Lings.pettimes); } /////////////////////////////////////// TRAIN PET ////////////////////////////////////////////////////////////////// function trainPet(uint _slot, uint _traintype, uint _trainergene) internal { address playerAddress = accountAddressToProceed(); uint _exp = contractStorage.getExperience(playerAddress); uint genestrength = contractStorage.getPlayerGeneStrength(playerAddress,_trainergene); //if (_trainergene !=0) { //if the trainer is not default Jojo, then make sure this player has different trainer require(genestrength > 0, "Don't have the gene."); //} PetData memory Lings; Lings.petstatuses = contractStorage.getPetStatuses(playerAddress,_slot); Lings.petunits = contractStorage.getPetUnits(playerAddress,_slot); Lings.pettimes = contractStorage.getPetTimes(playerAddress,_slot); Lings.petunitsmax = contractStorage.getPetUnitsMaxVitamined(playerAddress,_slot); uint _effort; //determine how full is the food after eaten in time uint _timenow = block.timestamp; require (Lings.petstatuses.id != 0, "empty slot"); require(_traintype <= 24, "Invalid training type"); if (_traintype==0){_effort = 3 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,170); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,100); } //basic 1, 0hp / 1atk / 2def/ 3spd / 4int else if (_traintype==1){_effort = 3 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,170); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,100); } else if (_traintype==2){_effort = 3 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,170); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,100); } else if (_traintype==3){_effort = 3 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,170); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,100); } else if (_traintype==4){_effort = 3 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,170); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,100); } else if (_traintype==5){_effort = 6 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,311); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,100); } //upgraded training center 1 else if (_traintype==6){_effort = 6 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,311); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,100); } else if (_traintype==7){_effort = 6 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,311); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,100); } else if (_traintype==8){_effort = 6 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,311); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,100); } else if (_traintype==9){_effort = 6 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,311); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,100); } else if (_traintype==10){_effort = 12 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,525); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,100); } //upgraded training center 2 else if (_traintype==11){_effort = 12 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,525); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,100); } else if (_traintype==12){_effort = 12 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,525); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,100); } else if (_traintype==13){_effort = 12 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,525); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,100); } else if (_traintype==14){_effort = 12 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,525); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,100); } else if (_traintype==15){_effort = 18 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,673); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,100); } //upgraded training center 3 else if (_traintype==16){_effort = 18 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,673); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,100); } else if (_traintype==17){_effort = 18 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,673); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,100); } else if (_traintype==18){_effort = 18 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,673); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,100); } else if (_traintype==19){_effort = 18 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,673); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,100); } else if (_traintype==20){_effort = 24 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,775); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,100); } //upgraded training center 4 else if (_traintype==21){_effort = 24 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,775); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,100); } else if (_traintype==22){_effort = 24 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,775); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,100); } else if (_traintype==23){_effort = 24 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,775); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,100); } else if (_traintype==24){_effort = 24 hours; Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,775); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,100); } uint _staminaleft = _timenow - Lings.pettimes.stamina; //staminatime sure lower than timenow. NO WAY staminatime > timenow, really is, then revert require(_staminaleft >= _effort, "Not enough stamina."); if (_staminaleft > PET_STAMINA_MAX) {_staminaleft = PET_STAMINA_MAX;} //capping stamina before spending _staminaleft -= _effort; //remaining stamina Lings.pettimes.stamina = _timenow - _staminaleft; //timenow always larger than staminaleft. Lings.pettimes.bond += _effort; _exp += _effort; //*************** check evolve ************** if ((Lings.petstatuses.stage == 1 && Lings.pettimes.bond > ROOKIETOMATURE_BOND)|| //check if rookie, then to mature (Lings.petstatuses.stage == 2 && Lings.pettimes.bond > MATURETOPERFECT_BOND)) { // check if mature, then to perfect //evolve id and maxstats //this need from RAM as update each patch FARPG_RAMInterface.TrainerData memory _trainerdata; _trainerdata.gene = _trainergene; _trainerdata.genestrength = contractStorage.getPlayergenestrengthArray(playerAddress); _trainerdata.hashed = uint(keccak256(abi.encodePacked(playerAddress,block.timestamp,block.prevrandao))); uint compiledGenestrength; (Lings.petstatuses, compiledGenestrength)= contractRAM.petunitsevolveid(Lings.petstatuses,Lings.petunits, _trainerdata); contractStorage.setPetStatuses(playerAddress,_slot , Lings.petstatuses); //update: ID, family, stage //ONCE evolve you gain Stamina and Endurance Lings.pettimes = S.Time({bond: Lings.pettimes.bond, stamina: _timenow - TIME_INITIALSTAMINA, hunger: _timenow + TIME_INITIALENDURANCE}); contractStorage.setPetTimes(playerAddress, _slot ,Lings.pettimes); //update: bond for evolve, stamina, hunger Lings.petunitsmax = contractRAM.petunitsmax(Lings.petstatuses.id); //use new id to get max stat, no genestrength and skills yet contractStorage.setPetUnitsMaxVitamined(playerAddress, _slot, Lings.petunitsmax); //evolve gain all stats by 30% Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,0,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,1,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,2,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,3,300); Lings.petunits=UnitUpdateStats(Lings.petunits,Lings.petunitsmax,4,300); if (Lings.petstatuses.stage == 2) {//evolved into Mature Lings.petstatuses.id += 1; //add 1 to minus 1 back to retain consistent gas. if (Lings.petstatuses.id > 10000) { //if its shinning, normalized it first for skill Lings.petunits.range = Lings.petstatuses.id - 10001; } else { Lings.petunits.range = Lings.petstatuses.id - 1; } } if (Lings.petstatuses.stage == 3) { Lings.petstatuses.id += 1; //add 1 to minus 1 back to retain consistent gas. if (Lings.petstatuses.id > 10000) { //if its shinning, normalized it first for skill Lings.petunits.special = Lings.petstatuses.id - 10001; } else { Lings.petunits.special = Lings.petstatuses.id - 1; } } contractStorage.setPetUnits(playerAddress, _slot , Lings.petunits); //final write into petUnits (stats, genestrength, skills) uint GENEbit = contractStorage.getPoint2(playerAddress); // Set the bit at the position corresponding to ID GENEbit |= (1 << ((Lings.petstatuses.id-1)%10000));//need to minus 1 bit because of previous add on shinning check contractStorage.setPoint2(playerAddress,GENEbit); //**//***////////////////////////////////////////// } else { //if no evolve, follow back the stamina and hunger, only update Units states and time, Status(ID, Family, stage) no change. contractStorage.setPetUnits(playerAddress, _slot , Lings.petunits); contractStorage.setPetTimes(playerAddress, _slot ,Lings.pettimes); } //************** check evolve end ****************** contractStorage.setExp(playerAddress, _exp); emit StatChangedResult(Lings.petunits,Lings.petstatuses,Lings.pettimes); } function Q1_3FeedPet(uint _slot, uint _foodtype, uint _trainergene) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 2,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,3); //Fed Pet, set Quest1 to 3, if unsuccessful, revert, so it wont set. feedPet(_slot, _foodtype, _trainergene); } function Q1_4TrainPet(uint _slot, uint _traintype, uint _trainergene) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 3,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,4); //trainPet, set Quest1 to 4, if unsuccessful, revert, so it wont set. trainPet(_slot, _traintype, _trainergene); } function Q1_5TrainPet(uint _slot, uint _traintype, uint _trainergene) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 4,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,5); //trainPet, set Quest1 to 5, if unsuccessful, revert, so it wont set. trainPet(_slot, _traintype, _trainergene); } function Q1_6TrainPet(uint _slot, uint _traintype, uint _trainergene) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 5,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,6); //trainPet, set Quest1 to 6, if unsuccessful, revert, so it wont set. trainPet(_slot, _traintype, _trainergene); } function Q1_7TrainPet(uint _slot, uint _traintype, uint _trainergene) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 6,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,7); //trainPet, set Quest1 to 7, if unsuccessful, revert, so it wont set. trainPet(_slot, _traintype, _trainergene); } function Q1_8TrainPet(uint _slot, uint _traintype, uint _trainergene) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 7,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,1,8); //trainPet, set Quest1 to 8, if unsuccessful, revert, so it wont set. trainPet(_slot, _traintype, _trainergene); } function Q1_9SetPartyTutorial(uint[30] memory partyFormation) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 8,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setPartyFormation(playerAddress,partyFormation); contractStorage.setMainQuest(playerAddress,1,9); //done the quest } function Q1_10FirstBattle(uint[3] calldata attackersID) public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 9,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- reentrant_time[playerAddress] = block.timestamp; bool AttackerWin; uint BattleRhythm; uint randret; S.Unit[3] memory AttackerUnits; //0,1,2 is Attacker, defender on PvPFULLRecords storage uint[3] memory AttackerIDs; //0,1,2 is Attacker, defender on PvPFULLRecords storage S.Unit[6] memory UnitGroup; //this is a group that will send to battlecontract uint bit; uint[3] memory OpponIDs; (AttackerUnits,AttackerIDs) = contractStorage.getBattleUnit3(playerAddress,attackersID); //get attacker/player data require(AttackerUnits[0].hp>0 || AttackerUnits[1].hp>0 || AttackerUnits[2].hp>0,"3 empty slots, cannot battle."); UnitGroup[0] = AttackerUnits[0]; UnitGroup[1] = AttackerUnits[1]; UnitGroup[2] = AttackerUnits[2]; UnitGroup[3] = S.Unit({ hp: 1300, attack: 110, defense: 12, speed: 311, intelligence: 355, genestrength: 10, range: 15, special: 0 }); //preset opponent, skill decide later. OpponIDs = [uint256(15), uint256(0), uint256(0)]; // will finalize later after decide the first battle //saved for event emit. (BattleRhythm, bit, AttackerWin, randret) = Battle.BattleV4_3v3(UnitGroup); if (AttackerWin == true) { //give treasure box, need items contract contractStorage.setMainQuest(playerAddress,1,10); //done the quest 1, set to 10 } else { //nothing happened... front end make them back to town and say better train more/listen to advice. } emit BattleResultV2(BattleRhythm, bit, AttackerWin, randret,UnitGroup,OpponIDs,AttackerIDs); } ////////////////////////////////////////////Quest 2 3 4 STARTED Parallel///////////////////////////////////////////////////////////// function Q2_1FightLena(uint[3] calldata attackersID) public payable nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 10 && contractStorage.getMainQuestProgress(playerAddress,2) == 0,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- bool AttackerWin; uint BattleRhythm; uint randret; S.Unit[3] memory AttackerUnits; //0,1,2 is Attacker, defender on PvPFULLRecords storage uint[3] memory AttackerIDs; //0,1,2 is Attacker, defender on PvPFULLRecords storage S.Unit[6] memory UnitGroup; //this is a group that will send to battlecontract uint bit; uint[3] memory OpponIDs; (AttackerUnits,AttackerIDs) = contractStorage.getBattleUnit3(playerAddress,attackersID); require(AttackerUnits[0].hp>0 || AttackerUnits[1].hp>0 || AttackerUnits[2].hp>0,"3 empty slots, cannot battle."); //player's Lings UnitGroup[0] = AttackerUnits[0]; UnitGroup[1] = AttackerUnits[1]; UnitGroup[2] = AttackerUnits[2]; //Lena's Lings Wolf M1 Packer ID 42 UnitGroup[3] = S.Unit({ hp: 3200, attack: 800, defense: 100, speed: 253, intelligence: 455, genestrength: 0, range: 8, special: 0 }); //range suppose ID42, but pending OpponIDs = [uint(42), uint(0), uint(0)]; (BattleRhythm, bit, AttackerWin, randret) = Battle.BattleV4_3v3(UnitGroup); if (AttackerWin == true) { if (contractStorage.getMainQuestProgress(playerAddress,2) == 0) { //<-----prevent exploit to reset quest contractStorage.setMainQuest(playerAddress,2,1); //WIN LENA, set the quest2 to 1 } } else { } emit BattleResultV2(BattleRhythm, bit, AttackerWin, randret,UnitGroup,OpponIDs,AttackerIDs); //If WON, she will go to town and Open SHOP } function Q2_2ShoppingTutorial() public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,2) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,2,2); //done the quest } ///-------------------------- function Q3_1SaveQingYue() public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 10 && contractStorage.getMainQuestProgress(playerAddress,3) == 0,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- if (contractStorage.getMainQuestProgress(playerAddress,3) == 0) { //<-----prevent exploit to reset quest contractStorage.setMainQuest(playerAddress,3,1); //done the quest } } function Q3_2RestaurantTutorial() public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,3) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,3,2); //done the quest //can feed 24 hours food. } //-------------------------- function Q4_1FightKlue(uint[3] calldata attackersID) public payable nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay10); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,1) == 10,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- bool AttackerWin; uint BattleRhythm; uint randret; S.Unit[3] memory AttackerUnits; //0,1,2 is Attacker, defender on PvPFULLRecords storage uint[3] memory AttackerIDs; //0,1,2 is Attacker, defender on PvPFULLRecords storage S.Unit[6] memory UnitGroup; //this is a group that will send to battlecontract uint bit; uint[3] memory OpponIDs; (AttackerUnits,AttackerIDs) = contractStorage.getBattleUnit3(playerAddress,attackersID); require(AttackerUnits[0].hp>0 || AttackerUnits[1].hp>0 || AttackerUnits[2].hp>0,"3 empty slots, cannot battle."); //player's Lings UnitGroup[0] = AttackerUnits[0]; UnitGroup[1] = AttackerUnits[1]; UnitGroup[2] = AttackerUnits[2]; UnitGroup[3] = S.Unit({ hp: 32152, attack: 4500, defense: 3600, speed: 610, intelligence: 355, genestrength: 50, range: 14, special: 16 }); UnitGroup[4] = S.Unit({ hp: 26431, attack: 2300, defense: 1060, speed: 650, intelligence: 355, genestrength: 50, range: 14, special: 0 }); UnitGroup[5] = S.Unit({ hp: 21002, attack: 2800, defense: 730, speed: 820, intelligence: 355, genestrength: 50, range: 15, special: 0 }); OpponIDs = [uint(16), uint(14), uint(15)]; // Call the BattleV4_3v3 function with matching types (BattleRhythm, bit, AttackerWin, randret) = Battle.BattleV4_3v3(UnitGroup); //(BattleRhythm, bit, AttackerWin, randret)=Battle.Calibrate(1); if (contractStorage.getMainQuestProgress(playerAddress,4) == 0) { //<-----prevent exploit to reset quest contractStorage.setMainQuest(playerAddress,4,1); //lose klue, escaped but pass quest } emit BattleResultV2(BattleRhythm, bit, AttackerWin, randret,UnitGroup,OpponIDs,AttackerIDs); //This suppose to be sure lose battle. but even lose, will complete the quest } function Q5_1AndreAskToFindMichael() public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,2) > 0 && contractStorage.getMainQuestProgress(playerAddress,3) > 0 && contractStorage.getMainQuestProgress(playerAddress,4) > 0 && contractStorage.getMainQuestProgress(playerAddress,5) == 0 ,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,5,1); //done the quest } function Q5_2MichaelShowBridge() public nonReentrant{ address playerAddress = accountAddressToProceed(); noneReentrant_time(playerAddress,QuesttoQuestDelay3); //prevent spam require(contractStorage.getMainQuestProgress(playerAddress,5) == 1,MESSAGE_STANDARDQUESTCONDITIONUNMATCHED); //<-----------------QUEST LIMIT ---- contractStorage.setMainQuest(playerAddress,5,2); //done the quest -- UNLOCK Simulated Dungeon } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"BattleRythm","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bit","type":"uint256"},{"indexed":false,"internalType":"bool","name":"Won","type":"bool"},{"indexed":false,"internalType":"uint256","name":"randret","type":"uint256"},{"components":[{"internalType":"uint256","name":"hp","type":"uint256"},{"internalType":"uint256","name":"attack","type":"uint256"},{"internalType":"uint256","name":"defense","type":"uint256"},{"internalType":"uint256","name":"speed","type":"uint256"},{"internalType":"uint256","name":"intelligence","type":"uint256"},{"internalType":"uint256","name":"genestrength","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"},{"internalType":"uint256","name":"special","type":"uint256"}],"indexed":false,"internalType":"struct S.Unit[6]","name":"unitgroup","type":"tuple[6]"},{"indexed":false,"internalType":"uint256[3]","name":"oponentid","type":"uint256[3]"},{"indexed":false,"internalType":"uint256[3]","name":"attackerid","type":"uint256[3]"}],"name":"BattleResultV2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"hp","type":"uint256"},{"internalType":"uint256","name":"attack","type":"uint256"},{"internalType":"uint256","name":"defense","type":"uint256"},{"internalType":"uint256","name":"speed","type":"uint256"},{"internalType":"uint256","name":"intelligence","type":"uint256"},{"internalType":"uint256","name":"genestrength","type":"uint256"},{"internalType":"uint256","name":"range","type":"uint256"},{"internalType":"uint256","name":"special","type":"uint256"}],"indexed":false,"internalType":"struct S.Unit","name":"AfterUnit","type":"tuple"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"family","type":"uint256"},{"internalType":"uint256","name":"stage","type":"uint256"}],"indexed":false,"internalType":"struct S.Status","name":"AfterStatus","type":"tuple"},{"components":[{"internalType":"uint256","name":"bond","type":"uint256"},{"internalType":"uint256","name":"stamina","type":"uint256"},{"internalType":"uint256","name":"hunger","type":"uint256"}],"indexed":false,"internalType":"struct S.Time","name":"AfterTime","type":"tuple"}],"name":"StatChangedResult","type":"event"},{"inputs":[],"name":"Battle","outputs":[{"internalType":"contract BattleV4","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"attackersID","type":"uint256[3]"}],"name":"Q1_10FirstBattle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q1_1JojoTranscended","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"uint256","name":"trainergene","type":"uint256"}],"name":"Q1_2GetFirstLings","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_foodtype","type":"uint256"},{"internalType":"uint256","name":"_trainergene","type":"uint256"}],"name":"Q1_3FeedPet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_traintype","type":"uint256"},{"internalType":"uint256","name":"_trainergene","type":"uint256"}],"name":"Q1_4TrainPet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_traintype","type":"uint256"},{"internalType":"uint256","name":"_trainergene","type":"uint256"}],"name":"Q1_5TrainPet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_traintype","type":"uint256"},{"internalType":"uint256","name":"_trainergene","type":"uint256"}],"name":"Q1_6TrainPet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_traintype","type":"uint256"},{"internalType":"uint256","name":"_trainergene","type":"uint256"}],"name":"Q1_7TrainPet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slot","type":"uint256"},{"internalType":"uint256","name":"_traintype","type":"uint256"},{"internalType":"uint256","name":"_trainergene","type":"uint256"}],"name":"Q1_8TrainPet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[30]","name":"partyFormation","type":"uint256[30]"}],"name":"Q1_9SetPartyTutorial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"attackersID","type":"uint256[3]"}],"name":"Q2_1FightLena","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"Q2_2ShoppingTutorial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q3_1SaveQingYue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q3_2RestaurantTutorial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"attackersID","type":"uint256[3]"}],"name":"Q4_1FightKlue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"Q5_1AndreAskToFindMichael","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Q5_2MichaelShowBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accountAddressToProceed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractRAM","outputs":[{"internalType":"contract FARPG_RAMInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStorage","outputs":[{"internalType":"contract IFARPG_Storage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openBoxIn24Hr_paid","outputs":[{"internalType":"uint256","name":"boxOpened","type":"uint256"},{"internalType":"uint256","name":"remainingTimeReset_s","type":"uint256"},{"internalType":"uint256","name":"pricePerBox","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateBattleV4Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateRAMContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAAddress","type":"address"}],"name":"updateStorageContractAAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526003600555600a6006553480156018575f5ffd5b506020336028565b600180556077565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b615c7a806100845f395ff3fe6080604052600436106101ba575f3560e01c8063647fed85116100f25780639b45010e11610092578063dab9cc6e11610062578063dab9cc6e14610475578063ebb6aadd14610494578063f2fde38b146104b3578063f38f9c98146104d2575f5ffd5b80639b45010e14610410578063b0012b6e1461042f578063b9f54f2c14610442578063d9d7cbc914610461575f5ffd5b80638aaa3523116100cd5780638aaa3523146103b85780638da5cb5b146103cc57806396a33dc5146103e857806397ea816f146103fc575f5ffd5b8063647fed851461035657806365eb4ff014610385578063715018a6146103a4575f5ffd5b80632d62844c1161015d5780633d5b8993116101385780633d5b8993146102da578063432614dd146102f95780634af2fe6f1461031857806357ba60e014610337575f5ffd5b80632d62844c1461029f57806338ed0d5b146102b35780633ccfd60b146102c6575f5ffd5b806319858da31161019857806319858da31461022f5780631bbeeb811461024e5780631bc348be1461026d5780632b343b741461028c575f5ffd5b80630383c312146101be5780630549b27e146101d457806306f9491314610210575b5f5ffd5b3480156101c9575f5ffd5b506101d26104e6565b005b3480156101df575f5ffd5b506002546101f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021b575f5ffd5b506101d261022a3660046153e8565b610632565b34801561023a575f5ffd5b506004546101f3906001600160a01b031681565b348015610259575f5ffd5b506101d261026836600461540a565b610682565b348015610278575f5ffd5b506101d261028736600461540a565b6107d8565b6101d261029a366004615433565b6108e6565b3480156102aa575f5ffd5b506101d26110ec565b6101d26102c1366004615453565b6111fa565b3480156102d1575f5ffd5b506101d26116a9565b3480156102e5575f5ffd5b506101d26102f436600461540a565b611729565b348015610304575f5ffd5b506101d261031336600461540a565b611838565b348015610323575f5ffd5b506003546101f3906001600160a01b031681565b348015610342575f5ffd5b506101d26103513660046153e8565b611947565b348015610361575f5ffd5b5061036a611997565b60408051938452602084019290925290820152606001610207565b348015610390575f5ffd5b506101d261039f3660046154e7565b611ace565b3480156103af575f5ffd5b506101d2611c73565b3480156103c3575f5ffd5b506101d2611c84565b3480156103d7575f5ffd5b505f546001600160a01b03166101f3565b3480156103f3575f5ffd5b506101f3611f13565b348015610407575f5ffd5b506101d2611f9d565b34801561041b575f5ffd5b506101d261042a36600461540a565b6121af565b6101d261043d366004615453565b6122be565b34801561044d575f5ffd5b506101d261045c3660046153e8565b6126c9565b34801561046c575f5ffd5b506101d2612719565b348015610480575f5ffd5b506101d261048f36600461540a565b61299f565b34801561049f575f5ffd5b506101d26104ae366004615453565b612ae6565b3480156104be575f5ffd5b506101d26104cd3660046153e8565b612de4565b3480156104dd575f5ffd5b506101d2612e5a565b6104ee612f68565b5f6104f7611f13565b905061050581600554612fc1565b60028054604051636afb050760e11b81526001600160a01b039091169163d5f60a0e91610536918591600401615547565b602060405180830381865afa158015610551573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105759190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906105c55760405162461bcd60e51b81526004016105bc9190615580565b60405180910390fd5b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916105f991859181906004016155b5565b5f604051808303815f87803b158015610610575f5ffd5b505af1158015610622573d5f5f3e3d5ffd5b505050505061063060018055565b565b61063a613050565b6001600160a01b0381166106605760405162461bcd60e51b81526004016105bc906155d9565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61068a612f68565b5f610693611f13565b90506106a181600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906106d4908490600190600401615547565b602060405180830381865afa1580156106ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107139190615560565b60ff166007146040518060400160405280601c81526020015f516020615c255f395f51905f528152509061075a5760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906008906004016155b5565b5f604051808303815f87803b1580156107a8575f5ffd5b505af11580156107ba573d5f5f3e3d5ffd5b505050506107c98484846130a9565b506107d360018055565b505050565b6107e0612f68565b5f6107e9611f13565b90506107f781600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061082a908490600190600401615547565b602060405180830381865afa158015610845573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108699190615560565b60ff166003146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906108b05760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061079190849060019060049081016155b5565b6108ee612f68565b5f6108f7611f13565b905061090581600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610938908490600190600401615547565b602060405180830381865afa158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109779190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906109be5760405162461bcd60e51b81526004016105bc9190615580565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916109f4918591600191906004016155b5565b5f604051808303815f87803b158015610a0b575f5ffd5b505af1158015610a1d573d5f5f3e3d5ffd5b50506002546040516329323b0d60e21b81526001600160a01b0385811660048301525f9450909116915063a4c8ec3490602401602060405180830381865afa158015610a6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8f9190615602565b6002546040516315f67cf360e31b81529192505f916001600160a01b039091169063afb3e79890610ac69086908890600401615547565b602060405180830381865afa158015610ae1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b059190615602565b6002546040516388e6c74d60e01b815291925042915f916001600160a01b0316906388e6c74d90610b3c9088908b90600401615547565b606060405180830381865afa158015610b57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7b9190615670565b9050835f03610be857600254604051633af5860360e21b8152600595506001600160a01b039091169063ebd6180c90610bba9088908890600401615547565b5f604051808303815f87803b158015610bd1575f5ffd5b505af1158015610be3573d5f5f3e3d5ffd5b505050505b838710610c375760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e00000000000060448201526064016105bc565b805115610c865760405162461bcd60e51b815260206004820152601860248201527f43686f73656e20736c6f74206973206f636375706965642e000000000000000060448201526064016105bc565b8515610cc45760405162461bcd60e51b815260206004820152600d60248201526c36bab9ba103132902537b5379760991b60448201526064016105bc565b60408051610100810182526103e8815260646020820181905260328284015260608083018290526080830182905260a083018790525f60c0840181905260e0840152835190810193849052600354634fa9782d60e01b909452908101899052909181906001600160a01b0316634fa9782d60848301602060405180830381865afa158015610d54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d789190615602565b8152602001610d8889600161569e565b8152602001600181525091505f60405180606001604052805f81526020016201518086610db591906156b7565b8152602001610dc6612a308761569e565b905260025460405163daa3f88b60e01b81529192506001600160a01b03169063daa3f88b90610dfd908a908d908790600401615718565b5f604051808303815f87803b158015610e14575f5ffd5b505af1158015610e26573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea9150610e5e908a908d90889060040161573d565b5f604051808303815f87803b158015610e75575f5ffd5b505af1158015610e87573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a789150610ebf908a908d90869060040161573d565b5f604051808303815f87803b158015610ed6575f5ffd5b505af1158015610ee8573d5f5f3e3d5ffd5b505060025460035486516040516315e3d00d60e11b815260048101919091526001600160a01b03928316945063c10e83e193508b928e921690632bc7a01a9060240161010060405180830381865afa158015610f46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6a91906157e1565b6040518463ffffffff1660e01b8152600401610f8893929190615718565b5f604051808303815f87803b158015610f9f575f5ffd5b505af1158015610fb1573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b038b811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015610fff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110239190615602565b84519091506110359061271090615810565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae9061106f908b908590600401615547565b5f604051808303815f87803b158015611086575f5ffd5b505af1158015611098573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd8385846040516110cf93929190615823565b60405180910390a150505050505050506110e860018055565b5050565b6110f4612f68565b5f6110fd611f13565b905061110b81600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061113e908490600590600401615547565b602060405180830381865afa158015611159573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117d9190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906111c45760405162461bcd60e51b81526004016105bc9190615580565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916105f9918591600591906004016155b5565b611202612f68565b5f61120b611f13565b905061121981600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061124c908490600190600401615547565b602060405180830381865afa158015611267573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128b9190615560565b60ff16600a146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906112d25760405162461bcd60e51b81526004016105bc9190615580565b505f5f5f6112de61526a565b6112e6615297565b6112ee6152b5565b5f6112f7615297565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90611329908c908e90600401615873565b61036060405180830381865afa158015611345573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113699190615892565b8151519196509450151580611382575060208501515115155b80611391575060408501515115155b6113ad5760405162461bcd60e51b81526004016105bc90615969565b845183526020808601518482015260408087015181860152805161010081018252617d98815261119492810192909252610e109082015261026260608201526101636080820152603260a0820152600e60c0820152601060e0820152836003602002018190525060405180610100016040528061673f81526020016108fc8152602001610424815260200161028a8152602001610163815260200160328152602001600e81526020015f8152508360046006811061146d5761146d615955565b602002018190525060405180610100016040528061520a8152602001610af081526020016102da81526020016103348152602001610163815260200160328152602001600f81526020015f815250836005600681106114ce576114ce615955565b602090810291909101919091526040805160608101825260108152600e92810192909252600f82820152600480549151639d392e5b60e01b81529293506001600160a01b0390911691639d392e5b91611529918791016159d4565b6080604051808303815f875af1158015611545573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156991906159e3565b600254604051636afb050760e11b8152929c50939a5098509093506001600160a01b039091169063d5f60a0e906115a6908c906004908101615547565b602060405180830381865afa1580156115c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e59190615560565b60ff165f036116515760025460405163b074a63560e01b81526001600160a01b039091169063b074a63590611623908c9060049060019082016155b5565b5f604051808303815f87803b15801561163a575f5ffd5b505af115801561164c573d5f5f3e3d5ffd5b505050505b7fed965831ff58bcf473e4bcfc1e0f5325bbb0c898866ca137ca39639ad40f3ca487838a8987868a60405161168c9796959493929190615a46565b60405180910390a15050505050505050506116a660018055565b50565b6116b1613050565b5f47116117005760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f000000000000000060448201526064016105bc565b60405133904780156108fc02915f818181858888f193505050501580156116a6573d5f5f3e3d5ffd5b611731612f68565b5f61173a611f13565b905061174881600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061177b908490600190600401615547565b602060405180830381865afa158015611796573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ba9190615560565b60ff166004146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906118015760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906005906004016155b5565b611840612f68565b5f611849611f13565b905061185781600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061188a908490600190600401615547565b602060405180830381865afa1580156118a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c99190615560565b60ff166006146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906119105760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906007906004016155b5565b61194f613050565b6001600160a01b0381166119755760405162461bcd60e51b81526004016105bc906155d9565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f6119a3611f13565b60025460405163aa31497760e01b81526001600160a01b0380841660048301529293505f929091169063aa31497790602401602060405180830381865afa1580156119f0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a149190615602565b611a1e90426156b7565b9050620151808110611a35575f94505f9350611ac7565b60025460405163f9c0109b60e01b81526001600160a01b0384811660048301529091169063f9c0109b90602401602060405180830381865afa158015611a7d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa19190615602565b9450611ab081620151806156b7565b9350611ac485674563918244f40000615a99565b92505b5050909192565b611ad6612f68565b5f611adf611f13565b9050611aed81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90611b20908490600190600401615547565b602060405180830381865afa158015611b3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f9190615560565b60ff166008146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090611ba65760405162461bcd60e51b81526004016105bc9190615580565b506002546040516303a6044160e01b81526001600160a01b03909116906303a6044190611bd99084908690600401615ab0565b5f604051808303815f87803b158015611bf0575f5ffd5b505af1158015611c02573d5f5f3e3d5ffd5b505060025460405163b074a63560e01b81526001600160a01b03909116925063b074a6359150611c3c9084906001906009906004016155b5565b5f604051808303815f87803b158015611c53575f5ffd5b505af1158015611c65573d5f5f3e3d5ffd5b50505050506116a660018055565b611c7b613050565b6106305f614113565b611c8c612f68565b5f611c95611f13565b9050611ca381600554612fc1565b60025460405163039e8dc560e31b81526001600160a01b03838116600483015290911690631cf46e28906024015f604051808303815f87803b158015611ce7575f5ffd5b505af1158015611cf9573d5f5f3e3d5ffd5b5050600254604051636afb050760e11b81526001600160a01b03909116925063d5f60a0e9150611d30908490600190600401615547565b602060405180830381865afa158015611d4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6f9190615560565b60408051808201909152601c81525f516020615c255f395f51905f5260208201529060ff1615611db25760405162461bcd60e51b81526004016105bc9190615580565b506002546040516315f67cf360e31b81525f916001600160a01b03169063afb3e79890611de59085908590600401615547565b602060405180830381865afa158015611e00573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e249190615602565b6002549091506001600160a01b0316635af875f7835f611e4585600161569e565b6040516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915260448201526064015f604051808303815f87803b158015611e90575f5ffd5b505af1158015611ea2573d5f5f3e3d5ffd5b505060025460405163b074a63560e01b81526001600160a01b03909116925063b074a6359150611edb90859060019081906004016155b5565b5f604051808303815f87803b158015611ef2575f5ffd5b505af1158015611f04573d5f5f3e3d5ffd5b50505050505061063060018055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015611f5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f819190615af1565b90506001600160a01b038116611f98573391505090565b919050565b611fa5612f68565b5f611fae611f13565b9050611fbc81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90611fef908490600190600401615547565b602060405180830381865afa15801561200a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202e9190615560565b60ff16600a1480156120b25750600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061206e908490600390600401615547565b602060405180830381865afa158015612089573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ad9190615560565b60ff16155b6040518060400160405280601c81526020015f516020615c255f395f51905f52815250906120f35760405162461bcd60e51b81526004016105bc9190615580565b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612127908490600390600401615547565b602060405180830381865afa158015612142573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121669190615560565b60ff165f036121a55760025460405163b074a63560e01b81526001600160a01b039091169063b074a635906105f99084906003906001906004016155b5565b5061063060018055565b6121b7612f68565b5f6121c0611f13565b90506121ce81600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612201908490600190600401615547565b602060405180830381865afa15801561221c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122409190615560565b60ff166005146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906122875760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906006906004016155b5565b6122c6612f68565b5f6122cf611f13565b90506122dd81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612310908490600190600401615547565b602060405180830381865afa15801561232b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234f9190615560565b60ff16600a1480156123d1575060028054604051636afb050760e11b81526001600160a01b039091169163d5f60a0e9161238d918591600401615547565b602060405180830381865afa1580156123a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123cc9190615560565b60ff16155b6040518060400160405280601c81526020015f516020615c255f395f51905f52815250906124125760405162461bcd60e51b81526004016105bc9190615580565b505f5f5f61241e61526a565b612426615297565b61242e6152b5565b5f612437615297565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90612469908c908e90600401615873565b61036060405180830381865afa158015612485573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a99190615892565b81515191965094501515806124c2575060208501515115155b806124d1575060408501515115155b6124ed5760405162461bcd60e51b81526004016105bc90615969565b50835182526020808501518184015260408086015181850152805161010081018252610c8081526103208184015260648183015260fd6060808301919091526101c760808301525f60a08301819052600860c084015260e083018190528187019290925282519081018352602a815292830181905282820152600480549151639d392e5b60e01b81526001600160a01b0390921691639d392e5b91612594918791016159d4565b6080604051808303815f875af11580156125b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d491906159e3565b909a5091985090965091508715156001036116515760028054604051636afb050760e11b81526001600160a01b039091169163d5f60a0e9161261a918d91600401615547565b602060405180830381865afa158015612635573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126599190615560565b60ff165f036126c4576002805460405163b074a63560e01b81526001600160a01b039091169163b074a63591612696918d916001906004016155b5565b5f604051808303815f87803b1580156126ad575f5ffd5b505af11580156126bf573d5f5f3e3d5ffd5b505050505b611651565b6126d1613050565b6001600160a01b0381166126f75760405162461bcd60e51b81526004016105bc906155d9565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b612721612f68565b5f61272a611f13565b905061273881600554612fc1565b60028054604051636afb050760e11b81525f926001600160a01b039092169163d5f60a0e9161276b918691600401615547565b602060405180830381865afa158015612786573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127aa9190615560565b60ff1611801561282c5750600254604051636afb050760e11b81525f916001600160a01b03169063d5f60a0e906127e8908590600390600401615547565b602060405180830381865afa158015612803573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128279190615560565b60ff16115b80156128a95750600254604051636afb050760e11b81525f916001600160a01b03169063d5f60a0e906128659085906004908101615547565b602060405180830381865afa158015612880573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a49190615560565b60ff16115b80156129275750600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906128e3908490600590600401615547565b602060405180830381865afa1580156128fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129229190615560565b60ff16155b6040518060400160405280601c81526020015f516020615c255f395f51905f52815250906129685760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906105f99084906005906001906004016155b5565b6129a7612f68565b5f6129b0611f13565b90506129be81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906129f1908490600190600401615547565b602060405180830381865afa158015612a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a309190615560565b60ff166002146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090612a775760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a63590612aae9084906001906003906004016155b5565b5f604051808303815f87803b158015612ac5575f5ffd5b505af1158015612ad7573d5f5f3e3d5ffd5b505050506107c9848484614162565b612aee612f68565b5f612af7611f13565b9050612b0581600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612b38908490600190600401615547565b602060405180830381865afa158015612b53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b779190615560565b60ff166009146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090612bbe5760405162461bcd60e51b81526004016105bc9190615580565b506001600160a01b0381165f9081526007602052604081204290558080612be361526a565b612beb615297565b612bf36152b5565b5f612bfc615297565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90612c2e908c908e90600401615873565b61036060405180830381865afa158015612c4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6e9190615892565b8151519196509450151580612c87575060208501515115155b80612c96575060408501515115155b612cb25760405162461bcd60e51b81526004016105bc90615969565b508351825260208085015181840152604080860151818501528051610100810182526105148152606e81840152600c818301526101376060808301919091526101636080830152600a60a0830152600f60c083018190525f60e084018190528288019390935283519182018452815292830181905282820152600480549151639d392e5b60e01b81526001600160a01b0390921691639d392e5b91612d59918791016159d4565b6080604051808303815f875af1158015612d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d9991906159e3565b909a5091985090965091508715156001036116515760025460405163b074a63560e01b81526001600160a01b039091169063b074a63590612696908c90600190600a906004016155b5565b612dec613050565b6001600160a01b038116612e515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bc565b6116a681614113565b612e62612f68565b5f612e6b611f13565b9050612e7981600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612eac908490600390600401615547565b602060405180830381865afa158015612ec7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eeb9190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090612f325760405162461bcd60e51b81526004016105bc9190615580565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916105f9918591600391906004016155b5565b600260015403612fba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105bc565b6002600155565b6001600160a01b0382165f9081526007602052604090205442116130275760405162461bcd60e51b815260206004820152601a60248201527f5370616d2070726576656e74696f6e206163746976617465642e00000000000060448201526064016105bc565b613031814261569e565b6001600160a01b039092165f9081526007602052604090209190915550565b5f546001600160a01b031633146106305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bc565b5f6130b2611f13565b600254604051631add0e8b60e21b81526001600160a01b0380841660048301529293505f9290911690636b743a2c90602401602060405180830381865afa1580156130ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131239190615602565b6002546040516315f67cf360e31b81529192505f916001600160a01b039091169063afb3e7989061315a9086908890600401615547565b602060405180830381865afa158015613175573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131999190615602565b90505f81116131e15760405162461bcd60e51b81526020600482015260146024820152732237b713ba103430bb32903a34329033b2b7329760611b60448201526064016105bc565b6131e96152e2565b6002546040516388e6c74d60e01b81526001600160a01b03909116906388e6c74d9061321b9087908b90600401615547565b606060405180830381865afa158015613236573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061325a9190615670565b8152600254604051636802761f60e01b81526001600160a01b0390911690636802761f9061328e9087908b90600401615547565b61010060405180830381865afa1580156132aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ce91906157e1565b602082015260025460405163fd45e19160e01b81526001600160a01b039091169063fd45e191906133059087908b90600401615547565b606060405180830381865afa158015613320573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133449190615670565b60408083019190915260025490516308ff748760e11b81526001600160a01b03909116906311fee90e9061337e9087908b90600401615547565b61010060405180830381865afa15801561339a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133be91906157e1565b60608201528051515f90429082036134055760405162461bcd60e51b815260206004820152600a602482015269195b5c1d1e481cdb1bdd60b21b60448201526064016105bc565b601888111561344e5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420747261696e696e67207479706560581b60448201526064016105bc565b875f0361349357612a30915061346f836020015184606001515f60aa615056565b602084018190526060840151613489919060016064615056565b6020840152613877565b876001036134d057612a3091506134b683602001518460600151600160aa615056565b602084018190526060840151613489919060036064615056565b8760020361350d57612a3091506134f383602001518460600151600260aa615056565b602084018190526060840151613489919060046064615056565b8760030361354957612a30915061353083602001518460600151600360aa615056565b60208401819052606084015161348991905f6064615056565b8760040361358657612a30915061356c83602001518460600151600460aa615056565b602084018190526060840151613489919060026064615056565b876005036135a957615460915061346f836020015184606001515f610137615056565b876006036135cd5761546091506134b6836020015184606001516001610137615056565b876007036135f15761546091506134f3836020015184606001516002610137615056565b87600803613615576154609150613530836020015184606001516003610137615056565b8760090361363957615460915061356c836020015184606001516004610137615056565b87600a0361365c5761a8c0915061346f836020015184606001515f61020d615056565b87600b036136805761a8c091506134b683602001518460600151600161020d615056565b87600c036136a45761a8c091506134f383602001518460600151600261020d615056565b87600d036136c85761a8c0915061353083602001518460600151600361020d615056565b87600e036136ec5761a8c0915061356c83602001518460600151600461020d615056565b87600f0361370f5761fd20915061346f836020015184606001515f6102a1615056565b876010036137335761fd2091506134b68360200151846060015160016102a1615056565b876011036137575761fd2091506134f38360200151846060015160026102a1615056565b8760120361377b5761fd2091506135308360200151846060015160036102a1615056565b8760130361379f5761fd20915061356c8360200151846060015160046102a1615056565b876014036137c35762015180915061346f836020015184606001515f610307615056565b876015036137e8576201518091506134b6836020015184606001516001610307615056565b8760160361380d576201518091506134f3836020015184606001516002610307615056565b8760170361383257620151809150613530836020015184606001516003610307615056565b8760180361387757620151809150613857836020015184606001516004610307615056565b602084018190526060840151613871919060026064615056565b60208401525b5f8360400151602001518261388c91906156b7565b9050828110156138d45760405162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b41039ba30b6b4b7309760691b60448201526064016105bc565b620151808111156138e55750620151805b6138ef83826156b7565b90506138fb81836156b7565b6040850180516020019190915251805184919061391990839061569e565b905250613926838761569e565b845160400151909650600114801561394557506040840151516201ec30105b8061396757508351604001516002148015613967575060408401515162047310105b15613f9957613974615353565b888152600254604051633f96d5e560e21b81526001600160a01b038a811660048301529091169063fe5b57949060240161064060405180830381865afa1580156139c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139e49190615b0c565b6020808301919091526040516bffffffffffffffffffffffff1960608b901b169181019190915242603482015244605482015260740160408051601f19818403018152918152815160209283012083820152600354875192880151915163f5a37ffb60e01b81525f936001600160a01b039092169263f5a37ffb92613a70929091908790600401615b73565b608060405180830381865afa158015613a8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aaf9190615be6565b875f01819350829052505060025f9054906101000a90046001600160a01b03166001600160a01b03166331ec4dea8a8e895f01516040518463ffffffff1660e01b8152600401613b019392919061573d565b5f604051808303815f87803b158015613b18575f5ffd5b505af1158015613b2a573d5f5f3e3d5ffd5b5050604080516060810182529089015151815291505060208101613b5162015180876156b7565b8152602001613b62612a308761569e565b815250866040018190525060025f9054906101000a90046001600160a01b03166001600160a01b03166384583a788a8e89604001516040518463ffffffff1660e01b8152600401613bb59392919061573d565b5f604051808303815f87803b158015613bcc575f5ffd5b505af1158015613bde573d5f5f3e3d5ffd5b50506003548851516040516315e3d00d60e11b81526001600160a01b039092169350632bc7a01a9250613c179160040190815260200190565b61010060405180830381865afa158015613c33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c5791906157e1565b866060018190525060025f9054906101000a90046001600160a01b03166001600160a01b031663c10e83e18a8e89606001516040518463ffffffff1660e01b8152600401613ca793929190615718565b5f604051808303815f87803b158015613cbe575f5ffd5b505af1158015613cd0573d5f5f3e3d5ffd5b50505050613cea866020015187606001515f61012c615056565b602087018190526060870151613d059190600161012c615056565b602087018190526060870151613d209190600261012c615056565b602087018190526060870151613d3b9190600361012c615056565b602087018190526060870151613d569190600461012c615056565b6020870152855160400151600203613dc1578551805160019190613d7b90839061569e565b9052508551516127101015613da857855151613d9a90612711906156b7565b602087015160c00152613dc1565b855151613db7906001906156b7565b602087015160c001525b855160400151600303613e27578551805160019190613de190839061569e565b9052508551516127101015613e0e57855151613e0090612711906156b7565b602087015160e00152613e27565b855151613e1d906001906156b7565b602087015160e001525b60025f9054906101000a90046001600160a01b03166001600160a01b031663daa3f88b8a8e89602001516040518463ffffffff1660e01b8152600401613e6f93929190615718565b5f604051808303815f87803b158015613e86575f5ffd5b505af1158015613e98573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b038d811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015613ee6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f0a9190615602565b87515190915061271090613f20906001906156b7565b613f2a9190615810565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae90613f64908d908590600401615547565b5f604051808303815f87803b158015613f7b575f5ffd5b505af1158015613f8d573d5f5f3e3d5ffd5b50505050505050614062565b600254602085015160405163daa3f88b60e01b81526001600160a01b039092169163daa3f88b91613fd0918b918f91600401615718565b5f604051808303815f87803b158015613fe7575f5ffd5b505af1158015613ff9573d5f5f3e3d5ffd5b5050600254604080880151905163108b074f60e31b81526001600160a01b0390921693506384583a789250614034918b918f9160040161573d565b5f604051808303815f87803b15801561404b575f5ffd5b505af115801561405d573d5f5f3e3d5ffd5b505050505b600254604051631ba678ad60e01b81526001600160a01b0390911690631ba678ad90614094908a908a90600401615547565b5f604051808303815f87803b1580156140ab575f5ffd5b505af11580156140bd573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd8460200151855f015186604001516040516140ff93929190615823565b60405180910390a150505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f61416b611f13565b6002546040516315f67cf360e31b81529192505f916001600160a01b039091169063afb3e798906141a29085908790600401615547565b602060405180830381865afa1580156141bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141e19190615602565b90505f81116142295760405162461bcd60e51b81526020600482015260146024820152732237b713ba103430bb32903a34329033b2b7329760611b60448201526064016105bc565b6142316152e2565b6002546040516388e6c74d60e01b81526001600160a01b03909116906388e6c74d906142639086908a90600401615547565b606060405180830381865afa15801561427e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142a29190615670565b8152600254604051636802761f60e01b81526001600160a01b0390911690636802761f906142d69086908a90600401615547565b61010060405180830381865afa1580156142f2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061431691906157e1565b602082015260025460405163fd45e19160e01b81526001600160a01b039091169063fd45e1919061434d9086908a90600401615547565b606060405180830381865afa158015614368573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061438c9190615670565b60408083019190915260025490516308ff748760e11b81526001600160a01b03909116906311fee90e906143c69086908a90600401615547565b61010060405180830381865afa1580156143e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440691906157e1565b6060820152600254604051631add0e8b60e21b81526001600160a01b0385811660048301525f921690636b743a2c90602401602060405180830381865afa158015614453573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144779190615602565b8251519091505f908190429082036144be5760405162461bcd60e51b815260206004820152600a602482015269195b5c1d1e481cdb1bdd60b21b60448201526064016105bc565b600a8911156145035760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420666f6f64207479706560781b60448201526064016105bc565b885f036145145761546092506145c9565b886001036145265761a8c092506145c9565b8860020361453857618ca092506145c9565b8860030361454a57618ca092506145c9565b8860040361455c57619ab092506145c9565b8860050361456e57619ab092506145c9565b88600603614581576201518092506145c9565b88600703614594576201518092506145c9565b886008036145a7576201518092506145c9565b886009036145ba576201518092506145c9565b88600a036145c9576201518092505b808560400151604001511015614617576040850151516145ea90849061569e565b6040860151526145fa838561569e565b9350614606838261569e565b6040808701510152600a91506146ff565b62015180838287604001516040015161463091906156b7565b61463a919061569e565b11156146bb575f8186604001516040015161465591906156b7565b61466290620151806156b7565b60408701515190915061467690829061569e565b604087015152614686818661569e565b94508361469482600a615a99565b61469e9190615c11565b92506146ad620151808361569e565b6040808801510152506146ff565b6040850151516146cc90849061569e565b6040860151526146dc838561569e565b9350828560400151604001516146f2919061569e565b6040808701510152600a91505b881561488057886001036147375761472d856020015186606001515f85600a6147289190615a99565b615056565b6020860152614880565b8860020361475b5761472d8560200151866060015160018560056147289190615a99565b8860030361477f5761472d8560200151866060015160028560056147289190615a99565b886004036147a35761472d8560200151866060015160038560056147289190615a99565b886005036147c75761472d8560200151866060015160048560056147289190615a99565b886006036147ea5761472d856020015186606001515f8560136147289190615a99565b8860070361480e5761472d85602001518660600151600185600b6147289190615a99565b886008036148325761472d85602001518660600151600285600b6147289190615a99565b886009036148565761472d85602001518660600151600385600b6147289190615a99565b88600a036148805761487a85602001518660600151600485600b6147289190615a99565b60208601525b845160400151600114801561489c57506040850151516201ec30105b806148be575084516040015160021480156148be575060408501515162047310105b15614ef0576148cb615353565b888152600254604051633f96d5e560e21b81526001600160a01b038a811660048301529091169063fe5b57949060240161064060405180830381865afa158015614917573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061493b9190615b0c565b6020808301919091526040516bffffffffffffffffffffffff1960608b901b169181019190915242603482015244605482015260740160408051601f19818403018152918152815160209283012083820152600354885192890151915163f5a37ffb60e01b81525f936001600160a01b039092169263f5a37ffb926149c7929091908790600401615b73565b608060405180830381865afa1580156149e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a069190615be6565b885f01819350829052505060025f9054906101000a90046001600160a01b03166001600160a01b03166331ec4dea8a8e8a5f01516040518463ffffffff1660e01b8152600401614a589392919061573d565b5f604051808303815f87803b158015614a6f575f5ffd5b505af1158015614a81573d5f5f3e3d5ffd5b505060408051606081018252908a015151815291505060208101614aa862015180866156b7565b8152602001614ab9612a308661569e565b815250876040018190525060025f9054906101000a90046001600160a01b03166001600160a01b03166384583a788a8e8a604001516040518463ffffffff1660e01b8152600401614b0c9392919061573d565b5f604051808303815f87803b158015614b23575f5ffd5b505af1158015614b35573d5f5f3e3d5ffd5b50506003548951516040516315e3d00d60e11b81526001600160a01b039092169350632bc7a01a9250614b6e9160040190815260200190565b61010060405180830381865afa158015614b8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bae91906157e1565b876060018190525060025f9054906101000a90046001600160a01b03166001600160a01b031663c10e83e18a8e8a606001516040518463ffffffff1660e01b8152600401614bfe93929190615718565b5f604051808303815f87803b158015614c15575f5ffd5b505af1158015614c27573d5f5f3e3d5ffd5b50505050614c41876020015188606001515f61012c615056565b602088018190526060880151614c5c9190600161012c615056565b602088018190526060880151614c779190600261012c615056565b602088018190526060880151614c929190600361012c615056565b602088018190526060880151614cad9190600461012c615056565b6020880152865160400151600203614d18578651805160019190614cd290839061569e565b9052508651516127101015614cff57865151614cf190612711906156b7565b602088015160c00152614d18565b865151614d0e906001906156b7565b602088015160c001525b865160400151600303614d7e578651805160019190614d3890839061569e565b9052508651516127101015614d6557865151614d5790612711906156b7565b602088015160e00152614d7e565b865151614d74906001906156b7565b602088015160e001525b60025f9054906101000a90046001600160a01b03166001600160a01b031663daa3f88b8a8e8a602001516040518463ffffffff1660e01b8152600401614dc693929190615718565b5f604051808303815f87803b158015614ddd575f5ffd5b505af1158015614def573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b038d811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015614e3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e619190615602565b88515190915061271090614e77906001906156b7565b614e819190615810565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae90614ebb908d908590600401615547565b5f604051808303815f87803b158015614ed2575f5ffd5b505af1158015614ee4573d5f5f3e3d5ffd5b50505050505050614fb9565b600254602086015160405163daa3f88b60e01b81526001600160a01b039092169163daa3f88b91614f27918b918f91600401615718565b5f604051808303815f87803b158015614f3e575f5ffd5b505af1158015614f50573d5f5f3e3d5ffd5b5050600254604080890151905163108b074f60e31b81526001600160a01b0390921693506384583a789250614f8b918b918f9160040161573d565b5f604051808303815f87803b158015614fa2575f5ffd5b505af1158015614fb4573d5f5f3e3d5ffd5b505050505b600254604051631ba678ad60e01b81526001600160a01b0390911690631ba678ad90614feb908a908890600401615547565b5f604051808303815f87803b158015615002575f5ffd5b505af1158015615014573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd8560200151865f015187604001516040516140ff93929190615823565b61505e615378565b849050825f036150b6578451845111156150ad57845184516103e891849161508691906156b7565b6150909190615a99565b61509a9190615c11565b85516150a6919061569e565b8152615262565b83518152615262565b8260010361512257846020015184602001511115615113576103e882866020015186602001516150e691906156b7565b6150f09190615a99565b6150fa9190615c11565b8560200151615109919061569e565b6020820152615262565b60208085015190820152615262565b8260020361518e5784604001518460400151111561517f576103e8828660400151866040015161515291906156b7565b61515c9190615a99565b6151669190615c11565b8560400151615175919061569e565b6040820152615262565b60408085015190820152615262565b826003036151fa578460600151846060015111156151eb576103e882866060015186606001516151be91906156b7565b6151c89190615a99565b6151d29190615c11565b85606001516151e1919061569e565b6060820152615262565b60608085015190820152615262565b8260040361526257846080015184608001511115615257576103e8828660800151866080015161522a91906156b7565b6152349190615a99565b61523e9190615c11565b856080015161524d919061569e565b6080820152615262565b608080850151908201525b949350505050565b60405180606001604052806003905b615281615378565b8152602001906001900390816152795790505090565b60405180606001604052806003906020820280368337509192915050565b6040518060c001604052806006905b6152cc615378565b8152602001906001900390816152c45790505090565b604051806080016040528061530e60405180606001604052805f81526020015f81526020015f81525090565b815260200161531b615378565b815260200161534160405180606001604052805f81526020015f81526020015f81525090565b815260200161534e615378565b905290565b60405180606001604052805f815260200161536c6153b5565b81526020015f81525090565b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518061064001604052806032906020820280368337509192915050565b6001600160a01b03811681146116a6575f5ffd5b5f602082840312156153f8575f5ffd5b8135615403816153d4565b9392505050565b5f5f5f6060848603121561541c575f5ffd5b505081359360208301359350604090920135919050565b5f5f60408385031215615444575f5ffd5b50508035926020909101359150565b5f60608284031215615463575f5ffd5b82606083011115615472575f5ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff811182821017156154b0576154b0615478565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156154df576154df615478565b604052919050565b5f6103c082840312156154f8575f5ffd5b82601f830112615506575f5ffd5b6103c0615512816154b6565b908301908085831115615523575f5ffd5b845b8381101561553d578035835260209283019201615525565b5095945050505050565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615570575f5ffd5b815160ff81168114615403575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b5f60208284031215615612575f5ffd5b5051919050565b5f60608284031215615629575f5ffd5b6040516060810167ffffffffffffffff8111828210171561564c5761564c615478565b60409081528351825260208085015190830152928301519281019290925250919050565b5f60608284031215615680575f5ffd5b6154038383615619565b634e487b7160e01b5f52601160045260245ffd5b808201808211156156b1576156b161568a565b92915050565b818103818111156156b1576156b161568a565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6001600160a01b038416815260208101839052610140810161526260408301846156ca565b6001600160a01b03841681526020810183905260a0810161526260408301848051825260208082015190830152604090810151910152565b5f6101008284031215615786575f5ffd5b61578e61548c565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f61010082840312156157f2575f5ffd5b6154038383615775565b634e487b7160e01b5f52601260045260245ffd5b5f8261581e5761581e6157fc565b500690565b6101c0810161583282866156ca565b8351610100830152602084015161012083015260408401516101408301528251610160830152602083015161018083015260408301516101a0830152615262565b6001600160a01b03831681526080810160608360208401379392505050565b5f5f61036083850312156158a4575f5ffd5b83601f8401126158b2575f5ffd5b6158bc60606154b6565b806103008501868111156158ce575f5ffd5b855b818110156158f3576158e28882615775565b8452602090930192610100016158d0565b508194508661031f870112615906575f5ffd5b5f925060609150615916826154b6565b9250829150606081018781111561592b575f5ffd5b5b8082101561594757815183526020928301929091019061592c565b505050809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b6020808252601d908201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e000000604082015260600190565b805f5b60068110156159ce576159b78483516156ca565b6101009390930192602091909101906001016159a3565b50505050565b61060081016156b182846159a0565b5f5f5f5f608085870312156159f6575f5ffd5b84516020860151604087015191955093508015158114615a14575f5ffd5b6060959095015193969295505050565b805f5b60038110156159ce578151845260209384019390910190600101615a27565b878152602081018790528515156040820152606081018590526107408101615a7160808301866159a0565b615a7f610680830185615a24565b615a8d6106e0830184615a24565b98975050505050505050565b80820281158282048414176156b1576156b161568a565b6001600160a01b03831681526103e0810160208201835f5b601e811015615ae7578151835260209283019290910190600101615ac8565b5050509392505050565b5f60208284031215615b01575f5ffd5b8151615403816153d4565b5f6106408284031215615b1d575f5ffd5b5f83601f840112615b2c575f5ffd5b505f80610640615b3b816154b6565b9250829150840185811115615b4e575f5ffd5b845b81811015615b68578051845260209384019301615b50565b509095945050505050565b8351815260208085015190820152604080850151908201526107e08101615b9d60608301856156ca565b8251610160830152602083015161018083015f5b6032811015615bd0578251825260209283019290910190600101615bb1565b50505060408301516107c0830152949350505050565b5f5f60808385031215615bf7575f5ffd5b615c018484615619565b6060939093015192949293505050565b5f82615c1f57615c1f6157fc565b50049056fe517565737420726571756972656d656e7420756e6d6174636865642e00000000a2646970667358221220417c92a8cf3ba30511ddf04298de2ed2226681754ae224ba3bf1bcf473f2f35264736f6c634300081c0033
Deployed Bytecode
0x6080604052600436106101ba575f3560e01c8063647fed85116100f25780639b45010e11610092578063dab9cc6e11610062578063dab9cc6e14610475578063ebb6aadd14610494578063f2fde38b146104b3578063f38f9c98146104d2575f5ffd5b80639b45010e14610410578063b0012b6e1461042f578063b9f54f2c14610442578063d9d7cbc914610461575f5ffd5b80638aaa3523116100cd5780638aaa3523146103b85780638da5cb5b146103cc57806396a33dc5146103e857806397ea816f146103fc575f5ffd5b8063647fed851461035657806365eb4ff014610385578063715018a6146103a4575f5ffd5b80632d62844c1161015d5780633d5b8993116101385780633d5b8993146102da578063432614dd146102f95780634af2fe6f1461031857806357ba60e014610337575f5ffd5b80632d62844c1461029f57806338ed0d5b146102b35780633ccfd60b146102c6575f5ffd5b806319858da31161019857806319858da31461022f5780631bbeeb811461024e5780631bc348be1461026d5780632b343b741461028c575f5ffd5b80630383c312146101be5780630549b27e146101d457806306f9491314610210575b5f5ffd5b3480156101c9575f5ffd5b506101d26104e6565b005b3480156101df575f5ffd5b506002546101f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021b575f5ffd5b506101d261022a3660046153e8565b610632565b34801561023a575f5ffd5b506004546101f3906001600160a01b031681565b348015610259575f5ffd5b506101d261026836600461540a565b610682565b348015610278575f5ffd5b506101d261028736600461540a565b6107d8565b6101d261029a366004615433565b6108e6565b3480156102aa575f5ffd5b506101d26110ec565b6101d26102c1366004615453565b6111fa565b3480156102d1575f5ffd5b506101d26116a9565b3480156102e5575f5ffd5b506101d26102f436600461540a565b611729565b348015610304575f5ffd5b506101d261031336600461540a565b611838565b348015610323575f5ffd5b506003546101f3906001600160a01b031681565b348015610342575f5ffd5b506101d26103513660046153e8565b611947565b348015610361575f5ffd5b5061036a611997565b60408051938452602084019290925290820152606001610207565b348015610390575f5ffd5b506101d261039f3660046154e7565b611ace565b3480156103af575f5ffd5b506101d2611c73565b3480156103c3575f5ffd5b506101d2611c84565b3480156103d7575f5ffd5b505f546001600160a01b03166101f3565b3480156103f3575f5ffd5b506101f3611f13565b348015610407575f5ffd5b506101d2611f9d565b34801561041b575f5ffd5b506101d261042a36600461540a565b6121af565b6101d261043d366004615453565b6122be565b34801561044d575f5ffd5b506101d261045c3660046153e8565b6126c9565b34801561046c575f5ffd5b506101d2612719565b348015610480575f5ffd5b506101d261048f36600461540a565b61299f565b34801561049f575f5ffd5b506101d26104ae366004615453565b612ae6565b3480156104be575f5ffd5b506101d26104cd3660046153e8565b612de4565b3480156104dd575f5ffd5b506101d2612e5a565b6104ee612f68565b5f6104f7611f13565b905061050581600554612fc1565b60028054604051636afb050760e11b81526001600160a01b039091169163d5f60a0e91610536918591600401615547565b602060405180830381865afa158015610551573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105759190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906105c55760405162461bcd60e51b81526004016105bc9190615580565b60405180910390fd5b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916105f991859181906004016155b5565b5f604051808303815f87803b158015610610575f5ffd5b505af1158015610622573d5f5f3e3d5ffd5b505050505061063060018055565b565b61063a613050565b6001600160a01b0381166106605760405162461bcd60e51b81526004016105bc906155d9565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61068a612f68565b5f610693611f13565b90506106a181600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906106d4908490600190600401615547565b602060405180830381865afa1580156106ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107139190615560565b60ff166007146040518060400160405280601c81526020015f516020615c255f395f51905f528152509061075a5760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906008906004016155b5565b5f604051808303815f87803b1580156107a8575f5ffd5b505af11580156107ba573d5f5f3e3d5ffd5b505050506107c98484846130a9565b506107d360018055565b505050565b6107e0612f68565b5f6107e9611f13565b90506107f781600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061082a908490600190600401615547565b602060405180830381865afa158015610845573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108699190615560565b60ff166003146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906108b05760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a6359061079190849060019060049081016155b5565b6108ee612f68565b5f6108f7611f13565b905061090581600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90610938908490600190600401615547565b602060405180830381865afa158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109779190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906109be5760405162461bcd60e51b81526004016105bc9190615580565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916109f4918591600191906004016155b5565b5f604051808303815f87803b158015610a0b575f5ffd5b505af1158015610a1d573d5f5f3e3d5ffd5b50506002546040516329323b0d60e21b81526001600160a01b0385811660048301525f9450909116915063a4c8ec3490602401602060405180830381865afa158015610a6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8f9190615602565b6002546040516315f67cf360e31b81529192505f916001600160a01b039091169063afb3e79890610ac69086908890600401615547565b602060405180830381865afa158015610ae1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b059190615602565b6002546040516388e6c74d60e01b815291925042915f916001600160a01b0316906388e6c74d90610b3c9088908b90600401615547565b606060405180830381865afa158015610b57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7b9190615670565b9050835f03610be857600254604051633af5860360e21b8152600595506001600160a01b039091169063ebd6180c90610bba9088908890600401615547565b5f604051808303815f87803b158015610bd1575f5ffd5b505af1158015610be3573d5f5f3e3d5ffd5b505050505b838710610c375760405162461bcd60e51b815260206004820152601a60248201527f43686f73656e20736c6f742065786365656473206c696d69742e00000000000060448201526064016105bc565b805115610c865760405162461bcd60e51b815260206004820152601860248201527f43686f73656e20736c6f74206973206f636375706965642e000000000000000060448201526064016105bc565b8515610cc45760405162461bcd60e51b815260206004820152600d60248201526c36bab9ba103132902537b5379760991b60448201526064016105bc565b60408051610100810182526103e8815260646020820181905260328284015260608083018290526080830182905260a083018790525f60c0840181905260e0840152835190810193849052600354634fa9782d60e01b909452908101899052909181906001600160a01b0316634fa9782d60848301602060405180830381865afa158015610d54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d789190615602565b8152602001610d8889600161569e565b8152602001600181525091505f60405180606001604052805f81526020016201518086610db591906156b7565b8152602001610dc6612a308761569e565b905260025460405163daa3f88b60e01b81529192506001600160a01b03169063daa3f88b90610dfd908a908d908790600401615718565b5f604051808303815f87803b158015610e14575f5ffd5b505af1158015610e26573d5f5f3e3d5ffd5b50506002546040516318f626f560e11b81526001600160a01b0390911692506331ec4dea9150610e5e908a908d90889060040161573d565b5f604051808303815f87803b158015610e75575f5ffd5b505af1158015610e87573d5f5f3e3d5ffd5b505060025460405163108b074f60e31b81526001600160a01b0390911692506384583a789150610ebf908a908d90869060040161573d565b5f604051808303815f87803b158015610ed6575f5ffd5b505af1158015610ee8573d5f5f3e3d5ffd5b505060025460035486516040516315e3d00d60e11b815260048101919091526001600160a01b03928316945063c10e83e193508b928e921690632bc7a01a9060240161010060405180830381865afa158015610f46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6a91906157e1565b6040518463ffffffff1660e01b8152600401610f8893929190615718565b5f604051808303815f87803b158015610f9f575f5ffd5b505af1158015610fb1573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b038b811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015610fff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110239190615602565b84519091506110359061271090615810565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae9061106f908b908590600401615547565b5f604051808303815f87803b158015611086575f5ffd5b505af1158015611098573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd8385846040516110cf93929190615823565b60405180910390a150505050505050506110e860018055565b5050565b6110f4612f68565b5f6110fd611f13565b905061110b81600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061113e908490600590600401615547565b602060405180830381865afa158015611159573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117d9190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906111c45760405162461bcd60e51b81526004016105bc9190615580565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916105f9918591600591906004016155b5565b611202612f68565b5f61120b611f13565b905061121981600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061124c908490600190600401615547565b602060405180830381865afa158015611267573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061128b9190615560565b60ff16600a146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906112d25760405162461bcd60e51b81526004016105bc9190615580565b505f5f5f6112de61526a565b6112e6615297565b6112ee6152b5565b5f6112f7615297565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90611329908c908e90600401615873565b61036060405180830381865afa158015611345573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113699190615892565b8151519196509450151580611382575060208501515115155b80611391575060408501515115155b6113ad5760405162461bcd60e51b81526004016105bc90615969565b845183526020808601518482015260408087015181860152805161010081018252617d98815261119492810192909252610e109082015261026260608201526101636080820152603260a0820152600e60c0820152601060e0820152836003602002018190525060405180610100016040528061673f81526020016108fc8152602001610424815260200161028a8152602001610163815260200160328152602001600e81526020015f8152508360046006811061146d5761146d615955565b602002018190525060405180610100016040528061520a8152602001610af081526020016102da81526020016103348152602001610163815260200160328152602001600f81526020015f815250836005600681106114ce576114ce615955565b602090810291909101919091526040805160608101825260108152600e92810192909252600f82820152600480549151639d392e5b60e01b81529293506001600160a01b0390911691639d392e5b91611529918791016159d4565b6080604051808303815f875af1158015611545573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156991906159e3565b600254604051636afb050760e11b8152929c50939a5098509093506001600160a01b039091169063d5f60a0e906115a6908c906004908101615547565b602060405180830381865afa1580156115c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e59190615560565b60ff165f036116515760025460405163b074a63560e01b81526001600160a01b039091169063b074a63590611623908c9060049060019082016155b5565b5f604051808303815f87803b15801561163a575f5ffd5b505af115801561164c573d5f5f3e3d5ffd5b505050505b7fed965831ff58bcf473e4bcfc1e0f5325bbb0c898866ca137ca39639ad40f3ca487838a8987868a60405161168c9796959493929190615a46565b60405180910390a15050505050505050506116a660018055565b50565b6116b1613050565b5f47116117005760405162461bcd60e51b815260206004820152601860248201527f436f6e74726163742062616c616e6365206973207a65726f000000000000000060448201526064016105bc565b60405133904780156108fc02915f818181858888f193505050501580156116a6573d5f5f3e3d5ffd5b611731612f68565b5f61173a611f13565b905061174881600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061177b908490600190600401615547565b602060405180830381865afa158015611796573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ba9190615560565b60ff166004146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906118015760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906005906004016155b5565b611840612f68565b5f611849611f13565b905061185781600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061188a908490600190600401615547565b602060405180830381865afa1580156118a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c99190615560565b60ff166006146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906119105760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906007906004016155b5565b61194f613050565b6001600160a01b0381166119755760405162461bcd60e51b81526004016105bc906155d9565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f6119a3611f13565b60025460405163aa31497760e01b81526001600160a01b0380841660048301529293505f929091169063aa31497790602401602060405180830381865afa1580156119f0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a149190615602565b611a1e90426156b7565b9050620151808110611a35575f94505f9350611ac7565b60025460405163f9c0109b60e01b81526001600160a01b0384811660048301529091169063f9c0109b90602401602060405180830381865afa158015611a7d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa19190615602565b9450611ab081620151806156b7565b9350611ac485674563918244f40000615a99565b92505b5050909192565b611ad6612f68565b5f611adf611f13565b9050611aed81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90611b20908490600190600401615547565b602060405180830381865afa158015611b3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f9190615560565b60ff166008146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090611ba65760405162461bcd60e51b81526004016105bc9190615580565b506002546040516303a6044160e01b81526001600160a01b03909116906303a6044190611bd99084908690600401615ab0565b5f604051808303815f87803b158015611bf0575f5ffd5b505af1158015611c02573d5f5f3e3d5ffd5b505060025460405163b074a63560e01b81526001600160a01b03909116925063b074a6359150611c3c9084906001906009906004016155b5565b5f604051808303815f87803b158015611c53575f5ffd5b505af1158015611c65573d5f5f3e3d5ffd5b50505050506116a660018055565b611c7b613050565b6106305f614113565b611c8c612f68565b5f611c95611f13565b9050611ca381600554612fc1565b60025460405163039e8dc560e31b81526001600160a01b03838116600483015290911690631cf46e28906024015f604051808303815f87803b158015611ce7575f5ffd5b505af1158015611cf9573d5f5f3e3d5ffd5b5050600254604051636afb050760e11b81526001600160a01b03909116925063d5f60a0e9150611d30908490600190600401615547565b602060405180830381865afa158015611d4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6f9190615560565b60408051808201909152601c81525f516020615c255f395f51905f5260208201529060ff1615611db25760405162461bcd60e51b81526004016105bc9190615580565b506002546040516315f67cf360e31b81525f916001600160a01b03169063afb3e79890611de59085908590600401615547565b602060405180830381865afa158015611e00573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e249190615602565b6002549091506001600160a01b0316635af875f7835f611e4585600161569e565b6040516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915260448201526064015f604051808303815f87803b158015611e90575f5ffd5b505af1158015611ea2573d5f5f3e3d5ffd5b505060025460405163b074a63560e01b81526001600160a01b03909116925063b074a6359150611edb90859060019081906004016155b5565b5f604051808303815f87803b158015611ef2575f5ffd5b505af1158015611f04573d5f5f3e3d5ffd5b50505050505061063060018055565b6002546040516302e6c26360e11b81523360048201525f9182916001600160a01b03909116906305cd84c690602401602060405180830381865afa158015611f5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f819190615af1565b90506001600160a01b038116611f98573391505090565b919050565b611fa5612f68565b5f611fae611f13565b9050611fbc81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90611fef908490600190600401615547565b602060405180830381865afa15801561200a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202e9190615560565b60ff16600a1480156120b25750600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e9061206e908490600390600401615547565b602060405180830381865afa158015612089573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120ad9190615560565b60ff16155b6040518060400160405280601c81526020015f516020615c255f395f51905f52815250906120f35760405162461bcd60e51b81526004016105bc9190615580565b50600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612127908490600390600401615547565b602060405180830381865afa158015612142573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121669190615560565b60ff165f036121a55760025460405163b074a63560e01b81526001600160a01b039091169063b074a635906105f99084906003906001906004016155b5565b5061063060018055565b6121b7612f68565b5f6121c0611f13565b90506121ce81600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612201908490600190600401615547565b602060405180830381865afa15801561221c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122409190615560565b60ff166005146040518060400160405280601c81526020015f516020615c255f395f51905f52815250906122875760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906107919084906001906006906004016155b5565b6122c6612f68565b5f6122cf611f13565b90506122dd81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612310908490600190600401615547565b602060405180830381865afa15801561232b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234f9190615560565b60ff16600a1480156123d1575060028054604051636afb050760e11b81526001600160a01b039091169163d5f60a0e9161238d918591600401615547565b602060405180830381865afa1580156123a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123cc9190615560565b60ff16155b6040518060400160405280601c81526020015f516020615c255f395f51905f52815250906124125760405162461bcd60e51b81526004016105bc9190615580565b505f5f5f61241e61526a565b612426615297565b61242e6152b5565b5f612437615297565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90612469908c908e90600401615873565b61036060405180830381865afa158015612485573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a99190615892565b81515191965094501515806124c2575060208501515115155b806124d1575060408501515115155b6124ed5760405162461bcd60e51b81526004016105bc90615969565b50835182526020808501518184015260408086015181850152805161010081018252610c8081526103208184015260648183015260fd6060808301919091526101c760808301525f60a08301819052600860c084015260e083018190528187019290925282519081018352602a815292830181905282820152600480549151639d392e5b60e01b81526001600160a01b0390921691639d392e5b91612594918791016159d4565b6080604051808303815f875af11580156125b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d491906159e3565b909a5091985090965091508715156001036116515760028054604051636afb050760e11b81526001600160a01b039091169163d5f60a0e9161261a918d91600401615547565b602060405180830381865afa158015612635573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126599190615560565b60ff165f036126c4576002805460405163b074a63560e01b81526001600160a01b039091169163b074a63591612696918d916001906004016155b5565b5f604051808303815f87803b1580156126ad575f5ffd5b505af11580156126bf573d5f5f3e3d5ffd5b505050505b611651565b6126d1613050565b6001600160a01b0381166126f75760405162461bcd60e51b81526004016105bc906155d9565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b612721612f68565b5f61272a611f13565b905061273881600554612fc1565b60028054604051636afb050760e11b81525f926001600160a01b039092169163d5f60a0e9161276b918691600401615547565b602060405180830381865afa158015612786573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127aa9190615560565b60ff1611801561282c5750600254604051636afb050760e11b81525f916001600160a01b03169063d5f60a0e906127e8908590600390600401615547565b602060405180830381865afa158015612803573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128279190615560565b60ff16115b80156128a95750600254604051636afb050760e11b81525f916001600160a01b03169063d5f60a0e906128659085906004908101615547565b602060405180830381865afa158015612880573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a49190615560565b60ff16115b80156129275750600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906128e3908490600590600401615547565b602060405180830381865afa1580156128fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129229190615560565b60ff16155b6040518060400160405280601c81526020015f516020615c255f395f51905f52815250906129685760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a635906105f99084906005906001906004016155b5565b6129a7612f68565b5f6129b0611f13565b90506129be81600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e906129f1908490600190600401615547565b602060405180830381865afa158015612a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a309190615560565b60ff166002146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090612a775760405162461bcd60e51b81526004016105bc9190615580565b5060025460405163b074a63560e01b81526001600160a01b039091169063b074a63590612aae9084906001906003906004016155b5565b5f604051808303815f87803b158015612ac5575f5ffd5b505af1158015612ad7573d5f5f3e3d5ffd5b505050506107c9848484614162565b612aee612f68565b5f612af7611f13565b9050612b0581600654612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612b38908490600190600401615547565b602060405180830381865afa158015612b53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b779190615560565b60ff166009146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090612bbe5760405162461bcd60e51b81526004016105bc9190615580565b506001600160a01b0381165f9081526007602052604081204290558080612be361526a565b612beb615297565b612bf36152b5565b5f612bfc615297565b60025460405163a69a496f60e01b81526001600160a01b039091169063a69a496f90612c2e908c908e90600401615873565b61036060405180830381865afa158015612c4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6e9190615892565b8151519196509450151580612c87575060208501515115155b80612c96575060408501515115155b612cb25760405162461bcd60e51b81526004016105bc90615969565b508351825260208085015181840152604080860151818501528051610100810182526105148152606e81840152600c818301526101376060808301919091526101636080830152600a60a0830152600f60c083018190525f60e084018190528288019390935283519182018452815292830181905282820152600480549151639d392e5b60e01b81526001600160a01b0390921691639d392e5b91612d59918791016159d4565b6080604051808303815f875af1158015612d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d9991906159e3565b909a5091985090965091508715156001036116515760025460405163b074a63560e01b81526001600160a01b039091169063b074a63590612696908c90600190600a906004016155b5565b612dec613050565b6001600160a01b038116612e515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bc565b6116a681614113565b612e62612f68565b5f612e6b611f13565b9050612e7981600554612fc1565b600254604051636afb050760e11b81526001600160a01b039091169063d5f60a0e90612eac908490600390600401615547565b602060405180830381865afa158015612ec7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eeb9190615560565b60ff166001146040518060400160405280601c81526020015f516020615c255f395f51905f5281525090612f325760405162461bcd60e51b81526004016105bc9190615580565b506002805460405163b074a63560e01b81526001600160a01b039091169163b074a635916105f9918591600391906004016155b5565b600260015403612fba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105bc565b6002600155565b6001600160a01b0382165f9081526007602052604090205442116130275760405162461bcd60e51b815260206004820152601a60248201527f5370616d2070726576656e74696f6e206163746976617465642e00000000000060448201526064016105bc565b613031814261569e565b6001600160a01b039092165f9081526007602052604090209190915550565b5f546001600160a01b031633146106305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bc565b5f6130b2611f13565b600254604051631add0e8b60e21b81526001600160a01b0380841660048301529293505f9290911690636b743a2c90602401602060405180830381865afa1580156130ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131239190615602565b6002546040516315f67cf360e31b81529192505f916001600160a01b039091169063afb3e7989061315a9086908890600401615547565b602060405180830381865afa158015613175573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131999190615602565b90505f81116131e15760405162461bcd60e51b81526020600482015260146024820152732237b713ba103430bb32903a34329033b2b7329760611b60448201526064016105bc565b6131e96152e2565b6002546040516388e6c74d60e01b81526001600160a01b03909116906388e6c74d9061321b9087908b90600401615547565b606060405180830381865afa158015613236573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061325a9190615670565b8152600254604051636802761f60e01b81526001600160a01b0390911690636802761f9061328e9087908b90600401615547565b61010060405180830381865afa1580156132aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ce91906157e1565b602082015260025460405163fd45e19160e01b81526001600160a01b039091169063fd45e191906133059087908b90600401615547565b606060405180830381865afa158015613320573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133449190615670565b60408083019190915260025490516308ff748760e11b81526001600160a01b03909116906311fee90e9061337e9087908b90600401615547565b61010060405180830381865afa15801561339a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133be91906157e1565b60608201528051515f90429082036134055760405162461bcd60e51b815260206004820152600a602482015269195b5c1d1e481cdb1bdd60b21b60448201526064016105bc565b601888111561344e5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420747261696e696e67207479706560581b60448201526064016105bc565b875f0361349357612a30915061346f836020015184606001515f60aa615056565b602084018190526060840151613489919060016064615056565b6020840152613877565b876001036134d057612a3091506134b683602001518460600151600160aa615056565b602084018190526060840151613489919060036064615056565b8760020361350d57612a3091506134f383602001518460600151600260aa615056565b602084018190526060840151613489919060046064615056565b8760030361354957612a30915061353083602001518460600151600360aa615056565b60208401819052606084015161348991905f6064615056565b8760040361358657612a30915061356c83602001518460600151600460aa615056565b602084018190526060840151613489919060026064615056565b876005036135a957615460915061346f836020015184606001515f610137615056565b876006036135cd5761546091506134b6836020015184606001516001610137615056565b876007036135f15761546091506134f3836020015184606001516002610137615056565b87600803613615576154609150613530836020015184606001516003610137615056565b8760090361363957615460915061356c836020015184606001516004610137615056565b87600a0361365c5761a8c0915061346f836020015184606001515f61020d615056565b87600b036136805761a8c091506134b683602001518460600151600161020d615056565b87600c036136a45761a8c091506134f383602001518460600151600261020d615056565b87600d036136c85761a8c0915061353083602001518460600151600361020d615056565b87600e036136ec5761a8c0915061356c83602001518460600151600461020d615056565b87600f0361370f5761fd20915061346f836020015184606001515f6102a1615056565b876010036137335761fd2091506134b68360200151846060015160016102a1615056565b876011036137575761fd2091506134f38360200151846060015160026102a1615056565b8760120361377b5761fd2091506135308360200151846060015160036102a1615056565b8760130361379f5761fd20915061356c8360200151846060015160046102a1615056565b876014036137c35762015180915061346f836020015184606001515f610307615056565b876015036137e8576201518091506134b6836020015184606001516001610307615056565b8760160361380d576201518091506134f3836020015184606001516002610307615056565b8760170361383257620151809150613530836020015184606001516003610307615056565b8760180361387757620151809150613857836020015184606001516004610307615056565b602084018190526060840151613871919060026064615056565b60208401525b5f8360400151602001518261388c91906156b7565b9050828110156138d45760405162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b41039ba30b6b4b7309760691b60448201526064016105bc565b620151808111156138e55750620151805b6138ef83826156b7565b90506138fb81836156b7565b6040850180516020019190915251805184919061391990839061569e565b905250613926838761569e565b845160400151909650600114801561394557506040840151516201ec30105b8061396757508351604001516002148015613967575060408401515162047310105b15613f9957613974615353565b888152600254604051633f96d5e560e21b81526001600160a01b038a811660048301529091169063fe5b57949060240161064060405180830381865afa1580156139c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139e49190615b0c565b6020808301919091526040516bffffffffffffffffffffffff1960608b901b169181019190915242603482015244605482015260740160408051601f19818403018152918152815160209283012083820152600354875192880151915163f5a37ffb60e01b81525f936001600160a01b039092169263f5a37ffb92613a70929091908790600401615b73565b608060405180830381865afa158015613a8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aaf9190615be6565b875f01819350829052505060025f9054906101000a90046001600160a01b03166001600160a01b03166331ec4dea8a8e895f01516040518463ffffffff1660e01b8152600401613b019392919061573d565b5f604051808303815f87803b158015613b18575f5ffd5b505af1158015613b2a573d5f5f3e3d5ffd5b5050604080516060810182529089015151815291505060208101613b5162015180876156b7565b8152602001613b62612a308761569e565b815250866040018190525060025f9054906101000a90046001600160a01b03166001600160a01b03166384583a788a8e89604001516040518463ffffffff1660e01b8152600401613bb59392919061573d565b5f604051808303815f87803b158015613bcc575f5ffd5b505af1158015613bde573d5f5f3e3d5ffd5b50506003548851516040516315e3d00d60e11b81526001600160a01b039092169350632bc7a01a9250613c179160040190815260200190565b61010060405180830381865afa158015613c33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c5791906157e1565b866060018190525060025f9054906101000a90046001600160a01b03166001600160a01b031663c10e83e18a8e89606001516040518463ffffffff1660e01b8152600401613ca793929190615718565b5f604051808303815f87803b158015613cbe575f5ffd5b505af1158015613cd0573d5f5f3e3d5ffd5b50505050613cea866020015187606001515f61012c615056565b602087018190526060870151613d059190600161012c615056565b602087018190526060870151613d209190600261012c615056565b602087018190526060870151613d3b9190600361012c615056565b602087018190526060870151613d569190600461012c615056565b6020870152855160400151600203613dc1578551805160019190613d7b90839061569e565b9052508551516127101015613da857855151613d9a90612711906156b7565b602087015160c00152613dc1565b855151613db7906001906156b7565b602087015160c001525b855160400151600303613e27578551805160019190613de190839061569e565b9052508551516127101015613e0e57855151613e0090612711906156b7565b602087015160e00152613e27565b855151613e1d906001906156b7565b602087015160e001525b60025f9054906101000a90046001600160a01b03166001600160a01b031663daa3f88b8a8e89602001516040518463ffffffff1660e01b8152600401613e6f93929190615718565b5f604051808303815f87803b158015613e86575f5ffd5b505af1158015613e98573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b038d811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015613ee6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f0a9190615602565b87515190915061271090613f20906001906156b7565b613f2a9190615810565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae90613f64908d908590600401615547565b5f604051808303815f87803b158015613f7b575f5ffd5b505af1158015613f8d573d5f5f3e3d5ffd5b50505050505050614062565b600254602085015160405163daa3f88b60e01b81526001600160a01b039092169163daa3f88b91613fd0918b918f91600401615718565b5f604051808303815f87803b158015613fe7575f5ffd5b505af1158015613ff9573d5f5f3e3d5ffd5b5050600254604080880151905163108b074f60e31b81526001600160a01b0390921693506384583a789250614034918b918f9160040161573d565b5f604051808303815f87803b15801561404b575f5ffd5b505af115801561405d573d5f5f3e3d5ffd5b505050505b600254604051631ba678ad60e01b81526001600160a01b0390911690631ba678ad90614094908a908a90600401615547565b5f604051808303815f87803b1580156140ab575f5ffd5b505af11580156140bd573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd8460200151855f015186604001516040516140ff93929190615823565b60405180910390a150505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f61416b611f13565b6002546040516315f67cf360e31b81529192505f916001600160a01b039091169063afb3e798906141a29085908790600401615547565b602060405180830381865afa1580156141bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141e19190615602565b90505f81116142295760405162461bcd60e51b81526020600482015260146024820152732237b713ba103430bb32903a34329033b2b7329760611b60448201526064016105bc565b6142316152e2565b6002546040516388e6c74d60e01b81526001600160a01b03909116906388e6c74d906142639086908a90600401615547565b606060405180830381865afa15801561427e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142a29190615670565b8152600254604051636802761f60e01b81526001600160a01b0390911690636802761f906142d69086908a90600401615547565b61010060405180830381865afa1580156142f2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061431691906157e1565b602082015260025460405163fd45e19160e01b81526001600160a01b039091169063fd45e1919061434d9086908a90600401615547565b606060405180830381865afa158015614368573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061438c9190615670565b60408083019190915260025490516308ff748760e11b81526001600160a01b03909116906311fee90e906143c69086908a90600401615547565b61010060405180830381865afa1580156143e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440691906157e1565b6060820152600254604051631add0e8b60e21b81526001600160a01b0385811660048301525f921690636b743a2c90602401602060405180830381865afa158015614453573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144779190615602565b8251519091505f908190429082036144be5760405162461bcd60e51b815260206004820152600a602482015269195b5c1d1e481cdb1bdd60b21b60448201526064016105bc565b600a8911156145035760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420666f6f64207479706560781b60448201526064016105bc565b885f036145145761546092506145c9565b886001036145265761a8c092506145c9565b8860020361453857618ca092506145c9565b8860030361454a57618ca092506145c9565b8860040361455c57619ab092506145c9565b8860050361456e57619ab092506145c9565b88600603614581576201518092506145c9565b88600703614594576201518092506145c9565b886008036145a7576201518092506145c9565b886009036145ba576201518092506145c9565b88600a036145c9576201518092505b808560400151604001511015614617576040850151516145ea90849061569e565b6040860151526145fa838561569e565b9350614606838261569e565b6040808701510152600a91506146ff565b62015180838287604001516040015161463091906156b7565b61463a919061569e565b11156146bb575f8186604001516040015161465591906156b7565b61466290620151806156b7565b60408701515190915061467690829061569e565b604087015152614686818661569e565b94508361469482600a615a99565b61469e9190615c11565b92506146ad620151808361569e565b6040808801510152506146ff565b6040850151516146cc90849061569e565b6040860151526146dc838561569e565b9350828560400151604001516146f2919061569e565b6040808701510152600a91505b881561488057886001036147375761472d856020015186606001515f85600a6147289190615a99565b615056565b6020860152614880565b8860020361475b5761472d8560200151866060015160018560056147289190615a99565b8860030361477f5761472d8560200151866060015160028560056147289190615a99565b886004036147a35761472d8560200151866060015160038560056147289190615a99565b886005036147c75761472d8560200151866060015160048560056147289190615a99565b886006036147ea5761472d856020015186606001515f8560136147289190615a99565b8860070361480e5761472d85602001518660600151600185600b6147289190615a99565b886008036148325761472d85602001518660600151600285600b6147289190615a99565b886009036148565761472d85602001518660600151600385600b6147289190615a99565b88600a036148805761487a85602001518660600151600485600b6147289190615a99565b60208601525b845160400151600114801561489c57506040850151516201ec30105b806148be575084516040015160021480156148be575060408501515162047310105b15614ef0576148cb615353565b888152600254604051633f96d5e560e21b81526001600160a01b038a811660048301529091169063fe5b57949060240161064060405180830381865afa158015614917573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061493b9190615b0c565b6020808301919091526040516bffffffffffffffffffffffff1960608b901b169181019190915242603482015244605482015260740160408051601f19818403018152918152815160209283012083820152600354885192890151915163f5a37ffb60e01b81525f936001600160a01b039092169263f5a37ffb926149c7929091908790600401615b73565b608060405180830381865afa1580156149e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a069190615be6565b885f01819350829052505060025f9054906101000a90046001600160a01b03166001600160a01b03166331ec4dea8a8e8a5f01516040518463ffffffff1660e01b8152600401614a589392919061573d565b5f604051808303815f87803b158015614a6f575f5ffd5b505af1158015614a81573d5f5f3e3d5ffd5b505060408051606081018252908a015151815291505060208101614aa862015180866156b7565b8152602001614ab9612a308661569e565b815250876040018190525060025f9054906101000a90046001600160a01b03166001600160a01b03166384583a788a8e8a604001516040518463ffffffff1660e01b8152600401614b0c9392919061573d565b5f604051808303815f87803b158015614b23575f5ffd5b505af1158015614b35573d5f5f3e3d5ffd5b50506003548951516040516315e3d00d60e11b81526001600160a01b039092169350632bc7a01a9250614b6e9160040190815260200190565b61010060405180830381865afa158015614b8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bae91906157e1565b876060018190525060025f9054906101000a90046001600160a01b03166001600160a01b031663c10e83e18a8e8a606001516040518463ffffffff1660e01b8152600401614bfe93929190615718565b5f604051808303815f87803b158015614c15575f5ffd5b505af1158015614c27573d5f5f3e3d5ffd5b50505050614c41876020015188606001515f61012c615056565b602088018190526060880151614c5c9190600161012c615056565b602088018190526060880151614c779190600261012c615056565b602088018190526060880151614c929190600361012c615056565b602088018190526060880151614cad9190600461012c615056565b6020880152865160400151600203614d18578651805160019190614cd290839061569e565b9052508651516127101015614cff57865151614cf190612711906156b7565b602088015160c00152614d18565b865151614d0e906001906156b7565b602088015160c001525b865160400151600303614d7e578651805160019190614d3890839061569e565b9052508651516127101015614d6557865151614d5790612711906156b7565b602088015160e00152614d7e565b865151614d74906001906156b7565b602088015160e001525b60025f9054906101000a90046001600160a01b03166001600160a01b031663daa3f88b8a8e8a602001516040518463ffffffff1660e01b8152600401614dc693929190615718565b5f604051808303815f87803b158015614ddd575f5ffd5b505af1158015614def573d5f5f3e3d5ffd5b505060025460405163b2cbbfad60e01b81526001600160a01b038d811660048301525f9450909116915063b2cbbfad90602401602060405180830381865afa158015614e3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e619190615602565b88515190915061271090614e77906001906156b7565b614e819190615810565b600254604051636ed6fed760e11b8152600190921b92909217916001600160a01b03169063ddadfdae90614ebb908d908590600401615547565b5f604051808303815f87803b158015614ed2575f5ffd5b505af1158015614ee4573d5f5f3e3d5ffd5b50505050505050614fb9565b600254602086015160405163daa3f88b60e01b81526001600160a01b039092169163daa3f88b91614f27918b918f91600401615718565b5f604051808303815f87803b158015614f3e575f5ffd5b505af1158015614f50573d5f5f3e3d5ffd5b5050600254604080890151905163108b074f60e31b81526001600160a01b0390921693506384583a789250614f8b918b918f9160040161573d565b5f604051808303815f87803b158015614fa2575f5ffd5b505af1158015614fb4573d5f5f3e3d5ffd5b505050505b600254604051631ba678ad60e01b81526001600160a01b0390911690631ba678ad90614feb908a908890600401615547565b5f604051808303815f87803b158015615002575f5ffd5b505af1158015615014573d5f5f3e3d5ffd5b505050507fc1e766b7fcdd3f4867b7cd3d80cf2616b5b7bc4340a7971becb6036c77aa65bd8560200151865f015187604001516040516140ff93929190615823565b61505e615378565b849050825f036150b6578451845111156150ad57845184516103e891849161508691906156b7565b6150909190615a99565b61509a9190615c11565b85516150a6919061569e565b8152615262565b83518152615262565b8260010361512257846020015184602001511115615113576103e882866020015186602001516150e691906156b7565b6150f09190615a99565b6150fa9190615c11565b8560200151615109919061569e565b6020820152615262565b60208085015190820152615262565b8260020361518e5784604001518460400151111561517f576103e8828660400151866040015161515291906156b7565b61515c9190615a99565b6151669190615c11565b8560400151615175919061569e565b6040820152615262565b60408085015190820152615262565b826003036151fa578460600151846060015111156151eb576103e882866060015186606001516151be91906156b7565b6151c89190615a99565b6151d29190615c11565b85606001516151e1919061569e565b6060820152615262565b60608085015190820152615262565b8260040361526257846080015184608001511115615257576103e8828660800151866080015161522a91906156b7565b6152349190615a99565b61523e9190615c11565b856080015161524d919061569e565b6080820152615262565b608080850151908201525b949350505050565b60405180606001604052806003905b615281615378565b8152602001906001900390816152795790505090565b60405180606001604052806003906020820280368337509192915050565b6040518060c001604052806006905b6152cc615378565b8152602001906001900390816152c45790505090565b604051806080016040528061530e60405180606001604052805f81526020015f81526020015f81525090565b815260200161531b615378565b815260200161534160405180606001604052805f81526020015f81526020015f81525090565b815260200161534e615378565b905290565b60405180606001604052805f815260200161536c6153b5565b81526020015f81525090565b6040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518061064001604052806032906020820280368337509192915050565b6001600160a01b03811681146116a6575f5ffd5b5f602082840312156153f8575f5ffd5b8135615403816153d4565b9392505050565b5f5f5f6060848603121561541c575f5ffd5b505081359360208301359350604090920135919050565b5f5f60408385031215615444575f5ffd5b50508035926020909101359150565b5f60608284031215615463575f5ffd5b82606083011115615472575f5ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff811182821017156154b0576154b0615478565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156154df576154df615478565b604052919050565b5f6103c082840312156154f8575f5ffd5b82601f830112615506575f5ffd5b6103c0615512816154b6565b908301908085831115615523575f5ffd5b845b8381101561553d578035835260209283019201615525565b5095945050505050565b6001600160a01b03929092168252602082015260400190565b5f60208284031215615570575f5ffd5b815160ff81168114615403575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b5f60208284031215615612575f5ffd5b5051919050565b5f60608284031215615629575f5ffd5b6040516060810167ffffffffffffffff8111828210171561564c5761564c615478565b60409081528351825260208085015190830152928301519281019290925250919050565b5f60608284031215615680575f5ffd5b6154038383615619565b634e487b7160e01b5f52601160045260245ffd5b808201808211156156b1576156b161568a565b92915050565b818103818111156156b1576156b161568a565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6001600160a01b038416815260208101839052610140810161526260408301846156ca565b6001600160a01b03841681526020810183905260a0810161526260408301848051825260208082015190830152604090810151910152565b5f6101008284031215615786575f5ffd5b61578e61548c565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e0928301519281019290925250919050565b5f61010082840312156157f2575f5ffd5b6154038383615775565b634e487b7160e01b5f52601260045260245ffd5b5f8261581e5761581e6157fc565b500690565b6101c0810161583282866156ca565b8351610100830152602084015161012083015260408401516101408301528251610160830152602083015161018083015260408301516101a0830152615262565b6001600160a01b03831681526080810160608360208401379392505050565b5f5f61036083850312156158a4575f5ffd5b83601f8401126158b2575f5ffd5b6158bc60606154b6565b806103008501868111156158ce575f5ffd5b855b818110156158f3576158e28882615775565b8452602090930192610100016158d0565b508194508661031f870112615906575f5ffd5b5f925060609150615916826154b6565b9250829150606081018781111561592b575f5ffd5b5b8082101561594757815183526020928301929091019061592c565b505050809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b6020808252601d908201527f3320656d70747920736c6f74732c2063616e6e6f7420626174746c652e000000604082015260600190565b805f5b60068110156159ce576159b78483516156ca565b6101009390930192602091909101906001016159a3565b50505050565b61060081016156b182846159a0565b5f5f5f5f608085870312156159f6575f5ffd5b84516020860151604087015191955093508015158114615a14575f5ffd5b6060959095015193969295505050565b805f5b60038110156159ce578151845260209384019390910190600101615a27565b878152602081018790528515156040820152606081018590526107408101615a7160808301866159a0565b615a7f610680830185615a24565b615a8d6106e0830184615a24565b98975050505050505050565b80820281158282048414176156b1576156b161568a565b6001600160a01b03831681526103e0810160208201835f5b601e811015615ae7578151835260209283019290910190600101615ac8565b5050509392505050565b5f60208284031215615b01575f5ffd5b8151615403816153d4565b5f6106408284031215615b1d575f5ffd5b5f83601f840112615b2c575f5ffd5b505f80610640615b3b816154b6565b9250829150840185811115615b4e575f5ffd5b845b81811015615b68578051845260209384019301615b50565b509095945050505050565b8351815260208085015190820152604080850151908201526107e08101615b9d60608301856156ca565b8251610160830152602083015161018083015f5b6032811015615bd0578251825260209283019290910190600101615bb1565b50505060408301516107c0830152949350505050565b5f5f60808385031215615bf7575f5ffd5b615c018484615619565b6060939093015192949293505050565b5f82615c1f57615c1f6157fc565b50049056fe517565737420726571756972656d656e7420756e6d6174636865642e00000000a2646970667358221220417c92a8cf3ba30511ddf04298de2ed2226681754ae224ba3bf1bcf473f2f35264736f6c634300081c0033
Deployed Bytecode Sourcemap
92112:44150:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;131129:445;;;;;;;;;;;;;:::i;:::-;;92177:37;;;;;;;;;;-1:-1:-1;92177:37:0;;;;-1:-1:-1;;;;;92177:37:0;;;;;;-1:-1:-1;;;;;202:32:1;;;184:51;;172:2;157:18;92177:37:0;;;;;;;;94642:230;;;;;;;;;;-1:-1:-1;94642:230:0;;;;;:::i;:::-;;:::i;92265:22::-;;;;;;;;;;-1:-1:-1;92265:22:0;;;;-1:-1:-1;;;;;92265:22:0;;;125617:570;;;;;;;;;;-1:-1:-1;125617:570:0;;;;;:::i;:::-;;:::i;123311:::-;;;;;;;;;;-1:-1:-1;123311:570:0;;;;;:::i;:::-;;:::i;98488:2359::-;;;;;;:::i;:::-;;:::i;135779:474::-;;;;;;;;;;;;;:::i;132763:2333::-;;;;;;:::i;:::-;;:::i;95095:257::-;;;;;;;;;;;;;:::i;123889:570::-;;;;;;;;;;-1:-1:-1;123889:570:0;;;;;:::i;:::-;;:::i;125041:::-;;;;;;;;;;-1:-1:-1;125041:570:0;;;;;:::i;:::-;;:::i;92221:37::-;;;;;;;;;;-1:-1:-1;92221:37:0;;;;-1:-1:-1;;;;;92221:37:0;;;94878:211;;;;;;;;;;-1:-1:-1;94878:211:0;;;;;:::i;:::-;;:::i;96920:756::-;;;;;;;;;;;;;:::i;:::-;;;;2376:25:1;;;2432:2;2417:18;;2410:34;;;;2460:18;;;2453:34;2364:2;2349:18;96920:756:0;2174:319:1;126195:541:0;;;;;;;;;;-1:-1:-1;126195:541:0;;;;;:::i;:::-;;:::i;2788:103::-;;;;;;;;;;;;;:::i;97817:655::-;;;;;;;;;;;;;:::i;2140:87::-;;;;;;;;;;-1:-1:-1;2186:7:0;2213:6;-1:-1:-1;;;;;2213:6:0;2140:87;;95937:429;;;;;;;;;;;;;:::i;131611:635::-;;;;;;;;;;;;;:::i;124465:570::-;;;;;;;;;;-1:-1:-1;124465:570:0;;;;;:::i;:::-;;:::i;129009:2112::-;;;;;;:::i;:::-;;:::i;94402:234::-;;;;;;;;;;-1:-1:-1;94402:234:0;;;;;:::i;:::-;;:::i;135110:661::-;;;;;;;;;;;;;:::i;122732:568::-;;;;;;;;;;-1:-1:-1;122732:568:0;;;;;:::i;:::-;;:::i;126744:2124::-;;;;;;;;;;-1:-1:-1;126744:2124:0;;;;;:::i;:::-;;:::i;3046:201::-;;;;;;;;;;-1:-1:-1;3046:201:0;;;;;:::i;:::-;;:::i;132252:473::-;;;;;;;;;;;;;:::i;131129:445::-;72764:21;:19;:21::i;:::-;131200::::1;131224:25;:23;:25::i;:::-;131200:49;;131260:52;131279:13;131293:18;;131260;:52::i;:::-;131346:15;::::0;;:53:::1;::::0;-1:-1:-1;;;131346:53:0;;-1:-1:-1;;;;;131346:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;131383:13;;131346:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;131403:1;131346:58;131405:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;131405:39:0::1;;::::0;131338:107:::1;;;;;-1:-1:-1::0;;;131338:107:0::1;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;131493:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;131493:47:0;;-1:-1:-1;;;;;131493:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;131522:13;;131493:15;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;131180:394;72808:20:::0;72202:1;73328:22;;73145:213;72808:20;131129:445::o;94642:230::-;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;94745:34:0;::::1;94737:62;;;;-1:-1:-1::0;;;94737:62:0::1;;;;;;;:::i;:::-;94810:11;:54:::0;;-1:-1:-1;;;;;;94810:54:0::1;-1:-1:-1::0;;;;;94810:54:0;;;::::1;::::0;;;::::1;::::0;;94642:230::o;125617:570::-;72764:21;:19;:21::i;:::-;125717::::1;125741:25;:23;:25::i;:::-;125717:49;;125777:52;125796:13;125810:18;;125777;:52::i;:::-;125863:15;::::0;:53:::1;::::0;-1:-1:-1;;;125863:53:0;;-1:-1:-1;;;;;125863:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;125900:13;;125863:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;125920:1;125863:58;125922:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;125922:39:0::1;;::::0;125855:107:::1;;;;;-1:-1:-1::0;;;125855:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;126010:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;126010:47:0;;-1:-1:-1;;;;;126010:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;126039:13;;126010:15;;126055:1:::1;::::0;126010:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;126138:41;126147:5;126154:10;126166:12;126138:8;:41::i;:::-;125706:481;72808:20:::0;72202:1;73328:22;;73145:213;72808:20;125617:570;;;:::o;123311:::-;72764:21;:19;:21::i;:::-;123411::::1;123435:25;:23;:25::i;:::-;123411:49;;123471:52;123490:13;123504:18;;123471;:52::i;:::-;123557:15;::::0;:53:::1;::::0;-1:-1:-1;;;123557:53:0;;-1:-1:-1;;;;;123557:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;123594:13;;123557:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;123614:1;123557:58;123616:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;123616:39:0::1;;::::0;123549:107:::1;;;;;-1:-1:-1::0;;;123549:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;123704:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;123704:47:0;;-1:-1:-1;;;;;123704:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;123733:13;;123704:15;;123749:1:::1;::::0;123704:47;::::1;;:::i;98488:2359::-:0;72764:21;:19;:21::i;:::-;98590::::1;98614:25;:23;:25::i;:::-;98590:49;;98650:52;98669:13;98683:18;;98650;:52::i;:::-;98736:15;::::0;:53:::1;::::0;-1:-1:-1;;;98736:53:0;;-1:-1:-1;;;;;98736:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;98773:13;;98736:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;98793:1;98736:58;98795:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;98795:39:0::1;;::::0;98728:107:::1;;;;;-1:-1:-1::0;;;98728:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;98883:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;98883:47:0;;-1:-1:-1;;;;;98883:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;98912:13;;98883:15;;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;98972:15:0::1;::::0;:40:::1;::::0;-1:-1:-1;;;98972:40:0;;-1:-1:-1;;;;;202:32:1;;;98972:40:0::1;::::0;::::1;184:51:1::0;98958:11:0::1;::::0;-1:-1:-1;98972:15:0;;::::1;::::0;-1:-1:-1;98972:25:0::1;::::0;157:18:1;;98972:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;99066:15;::::0;:64:::1;::::0;-1:-1:-1;;;99066:64:0;;98958:54;;-1:-1:-1;99046:17:0::1;::::0;-1:-1:-1;;;;;99066:15:0;;::::1;::::0;:37:::1;::::0;:64:::1;::::0;99104:13;;99118:11;;99066:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;99289:15;::::0;:51:::1;::::0;-1:-1:-1;;;99289:51:0;;99046:84;;-1:-1:-1;99157:15:0::1;::::0;99141:13:::1;::::0;-1:-1:-1;;;;;99289:15:0::1;::::0;:30:::1;::::0;:51:::1;::::0;99320:13;;99335:4;;99289:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;99260:80;;99355:6;99365:1;99355:11:::0;99351:168:::1;;99408:15;::::0;:48:::1;::::0;-1:-1:-1;;;99408:48:0;;99392:1:::1;::::0;-1:-1:-1;;;;;;99408:15:0;;::::1;::::0;:25:::1;::::0;:48:::1;::::0;99434:13;;99392:1;;99408:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;99351:168;99544:6;99537:4;:13;99529:52;;;::::0;-1:-1:-1;;;99529:52:0;;8908:2:1;99529:52:0::1;::::0;::::1;8890:21:1::0;8947:2;8927:18;;;8920:30;8986:28;8966:18;;;8959:56;9032:18;;99529:52:0::1;8706:350:1::0;99529:52:0::1;99600:13:::0;;:18;99592:55:::1;;;::::0;-1:-1:-1;;;99592:55:0;;9263:2:1;99592:55:0::1;::::0;::::1;9245:21:1::0;9302:2;9282:18;;;9275:30;9341:26;9321:18;;;9314:54;9385:18;;99592:55:0::1;9061:348:1::0;99592:55:0::1;99666:16:::0;;99658:42:::1;;;::::0;-1:-1:-1;;;99658:42:0;;9616:2:1;99658:42:0::1;::::0;::::1;9598:21:1::0;9655:2;9635:18;;;9628:30;-1:-1:-1;;;9674:18:1;;;9667:43;9727:18;;99658:42:0::1;9414:337:1::0;99658:42:0::1;99808:126;::::0;;::::1;::::0;::::1;::::0;;99821:4:::1;99808:126:::0;;99835:3:::1;99808:126;::::0;::::1;::::0;;;99849:2:::1;99808:126:::0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;99808:126:0;;;;;;;;;;99958:93;;;;::::1;::::0;;;;99972:11:::1;::::0;-1:-1:-1;;;99972:41:0;;;;;;9902:25:1;;;99808:126:0;;99958:93;;-1:-1:-1;;;;;99972:11:0::1;:28;9875:18:1::0;;;99972:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;99958:93:::0;;::::1;;100023:15;:11:::0;100037:1:::1;100023:15;:::i;:::-;99958:93;;;;100048:1;99958:93;;::::0;99945:106:::1;;100062:22;100088:100;;;;;;;;100102:1;100088:100;;;;93666:8;100114;:30;;;;:::i;:::-;100088:100:::0;;::::1;;100154:32;93737:7;100154:8:::0;:32:::1;:::i;:::-;100088:100:::0;;100199:15:::1;::::0;:58:::1;::::0;-1:-1:-1;;;100199:58:0;;100062:126;;-1:-1:-1;;;;;;100199:15:0::1;::::0;:27:::1;::::0;:58:::1;::::0;100227:13;;100242:4;;100248:8;;100199:58:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;100268:15:0::1;::::0;:63:::1;::::0;-1:-1:-1;;;100268:63:0;;-1:-1:-1;;;;;100268:15:0;;::::1;::::0;-1:-1:-1;100268:30:0::1;::::0;-1:-1:-1;100268:63:0::1;::::0;100299:13;;100313:4;;100320:10;;100268:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;100342:15:0::1;::::0;:58:::1;::::0;-1:-1:-1;;;100342:58:0;;-1:-1:-1;;;;;100342:15:0;;::::1;::::0;-1:-1:-1;100342:27:0::1;::::0;-1:-1:-1;100342:58:0::1;::::0;100370:13;;100385:4;;100391:8;;100342:58:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;100420:15:0::1;::::0;100481:11:::1;::::0;100505:13;;100481:38:::1;::::0;-1:-1:-1;;;100481:38:0;;::::1;::::0;::::1;9902:25:1::0;;;;-1:-1:-1;;;;;100420:15:0;;::::1;::::0;-1:-1:-1;100420:39:0::1;::::0;-1:-1:-1;100460:13:0;;100475:4;;100481:11:::1;::::0;:23:::1;::::0;9875:18:1;;100481:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;100420:100;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;100556:15:0::1;::::0;:40:::1;::::0;-1:-1:-1;;;100556:40:0;;-1:-1:-1;;;;;202:32:1;;;100556:40:0::1;::::0;::::1;184:51:1::0;100541:12:0::1;::::0;-1:-1:-1;100556:15:0;;::::1;::::0;-1:-1:-1;100556:25:0::1;::::0;157:18:1;;100556:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;100635:13:::0;;100541:55;;-1:-1:-1;100635:19:0::1;::::0;100649:5:::1;::::0;100635:19:::1;:::i;:::-;100709:15;::::0;:48:::1;::::0;-1:-1:-1;;;100709:48:0;;100629:1:::1;:26:::0;;::::1;100617:39:::0;;;::::1;::::0;-1:-1:-1;;;;;100709:15:0::1;::::0;:25:::1;::::0;:48:::1;::::0;100735:13;;100617:39;;100709:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;100792:47;100810:8;100819:10;100830:8;100792:47;;;;;;;;:::i;:::-;;;;;;;;98571:2276;;;;;;;;72808:20:::0;72202:1;73328:22;;73145:213;72808:20;98488:2359;;:::o;135779:474::-;72764:21;:19;:21::i;:::-;135851::::1;135875:25;:23;:25::i;:::-;135851:49;;135911:52;135930:13;135944:18;;135911;:52::i;:::-;136006:15;::::0;:53:::1;::::0;-1:-1:-1;;;136006:53:0;;-1:-1:-1;;;;;136006:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;136043:13;;136057:1:::1;::::0;136006:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;136063:1;136006:58;136065:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;136065:39:0::1;;::::0;135998:107:::1;;;;;-1:-1:-1::0;;;135998:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;136153:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;136153:47:0;;-1:-1:-1;;;;;136153:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;136182:13;;136196:1:::1;::::0;136153:15;:47:::1;;;:::i;132763:2333::-:0;72764:21;:19;:21::i;:::-;132863::::1;132887:25;:23;:25::i;:::-;132863:49;;132923:53;132942:13;132956:19;;132923:18;:53::i;:::-;133019:15;::::0;:53:::1;::::0;-1:-1:-1;;;133019:53:0;;-1:-1:-1;;;;;133019:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;133056:13;;133019:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;133076:2;133019:59;133079:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;133079:39:0::1;;::::0;133011:108:::1;;;;;-1:-1:-1::0;;;133011:108:0::1;;;;;;;;:::i;:::-;;133176:16;133203:17;133231:12;133254:30;;:::i;:::-;133351:26;;:::i;:::-;133444;;:::i;:::-;133532:8;133551:23;;:::i;:::-;133615:15;::::0;:57:::1;::::0;-1:-1:-1;;;133615:57:0;;-1:-1:-1;;;;;133615:15:0;;::::1;::::0;:30:::1;::::0;:57:::1;::::0;133646:13;;133660:11;;133615:57:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;133691:16:::0;;:19;133585:87;;-1:-1:-1;133585:87:0;-1:-1:-1;133691:21:0;;;:46:::1;;-1:-1:-1::0;133716:16:0::1;::::0;::::1;::::0;:19;:21;;133691:46:::1;:71;;;-1:-1:-1::0;133741:16:0;;::::1;::::0;:19;:21;;133691:71:::1;133683:112;;;;-1:-1:-1::0;;;133683:112:0::1;;;;;;;:::i;:::-;133847:16:::0;;133832:31;;133847:16:::1;133889::::0;;::::1;::::0;133874:12;;::::1;:31:::0;133931:16;;;::::1;::::0;133916:12;;::::1;:31:::0;133982:123;;::::1;::::0;::::1;::::0;;133995:5:::1;133982:123:::0;;134010:4:::1;133982:123:::0;;::::1;::::0;;;;134025:4:::1;133982:123:::0;;;;134038:3:::1;133982:123:::0;;;;134057:3:::1;133982:123:::0;;;;134076:2:::1;133982:123:::0;;;;134087:2:::1;133982:123:::0;;;;134100:2:::1;133982:123:::0;;;;133832:9;133977:1:::1;133967:12;;;:138;;;;134132:122;;;;;;;;134145:5;134132:122;;;;134160:4;134132:122;;;;134175:4;134132:122;;;;134188:3;134132:122;;;;134207:3;134132:122;;;;134226:2;134132:122;;;;134237:2;134132:122;;;;134250:1;134132:122;;::::0;134117:9:::1;134127:1;134117:12;;;;;;;:::i;:::-;;;;:137;;;;134281:121;;;;;;;;134294:5;134281:121;;;;134309:4;134281:121;;;;134324:3;134281:121;;;;134336:3;134281:121;;;;134355:3;134281:121;;;;134374:2;134281:121;;;;134385:2;134281:121;;;;134398:1;134281:121;;::::0;134266:9:::1;134276:1;134266:12;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;:136:::0;;;;134413:41:::1;::::0;;::::1;::::0;::::1;::::0;;134430:2:::1;134413:41:::0;;134440:2:::1;134413:41:::0;;::::1;::::0;;;;134450:2:::1;134413:41:::0;;;;134572:6:::1;::::0;;:30;;-1:-1:-1;;;134572:30:0;;134413:41;;-1:-1:-1;;;;;;134572:6:0;;::::1;::::0;:19:::1;::::0;:30:::1;::::0;134592:9;;134572:30:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;134691:15;::::0;:53:::1;::::0;-1:-1:-1;;;134691:53:0;;134528:74;;-1:-1:-1;134528:74:0;;-1:-1:-1;134528:74:0;-1:-1:-1;134528:74:0;;-1:-1:-1;;;;;;134691:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;134728:13;;134742:1:::1;::::0;134691:53;::::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;134748:1;134691:58:::0;134687:213:::1;;134805:15;::::0;:47:::1;::::0;-1:-1:-1;;;134805:47:0;;-1:-1:-1;;;;;134805:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;134834:13;;134848:1:::1;::::0;134805:15;;:47;::::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;134687:213;134915:86;134930:12;134944:3;134949:11;134962:7;134970:9;134980:8;134989:11;134915:86;;;;;;;;;;;;:::i;:::-;;;;;;;;132843:2253;;;;;;;;;72808:20:::0;72202:1;73328:22;;73145:213;72808:20;132763:2333;:::o;95095:257::-;2026:13;:11;:13::i;:::-;95252:1:::1;95228:21;:25;95220:62;;;::::0;-1:-1:-1;;;95220:62:0;;20469:2:1;95220:62:0::1;::::0;::::1;20451:21:1::0;20508:2;20488:18;;;20481:30;20547:26;20527:18;;;20520:54;20591:18;;95220:62:0::1;20267:348:1::0;95220:62:0::1;95293:51;::::0;95301:10:::1;::::0;95322:21:::1;95293:51:::0;::::1;;;::::0;::::1;::::0;;;95322:21;95301:10;95293:51;::::1;;;;;;;;;;;;;;;;;;123889:570:::0;72764:21;:19;:21::i;:::-;123989::::1;124013:25;:23;:25::i;:::-;123989:49;;124049:52;124068:13;124082:18;;124049;:52::i;:::-;124135:15;::::0;:53:::1;::::0;-1:-1:-1;;;124135:53:0;;-1:-1:-1;;;;;124135:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;124172:13;;124135:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;124192:1;124135:58;124194:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;124194:39:0::1;;::::0;124127:107:::1;;;;;-1:-1:-1::0;;;124127:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;124282:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;124282:47:0;;-1:-1:-1;;;;;124282:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;124311:13;;124282:15;;124327:1:::1;::::0;124282:47:::1;;;:::i;125041:570::-:0;72764:21;:19;:21::i;:::-;125141::::1;125165:25;:23;:25::i;:::-;125141:49;;125201:52;125220:13;125234:18;;125201;:52::i;:::-;125287:15;::::0;:53:::1;::::0;-1:-1:-1;;;125287:53:0;;-1:-1:-1;;;;;125287:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;125324:13;;125287:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;125344:1;125287:58;125346:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;125346:39:0::1;;::::0;125279:107:::1;;;;;-1:-1:-1::0;;;125279:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;125434:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;125434:47:0;;-1:-1:-1;;;;;125434:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;125463:13;;125434:15;;125479:1:::1;::::0;125434:47:::1;;;:::i;94878:211::-:0;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;94977:34:0;::::1;94969:62;;;;-1:-1:-1::0;;;94969:62:0::1;;;;;;;:::i;:::-;95042:6;:39:::0;;-1:-1:-1;;;;;;95042:39:0::1;-1:-1:-1::0;;;;;95042:39:0;;;::::1;::::0;;;::::1;::::0;;94878:211::o;96920:756::-;96971:14;96987:25;97014:16;97119:21;97143:25;:23;:25::i;:::-;97216:15;;:44;;-1:-1:-1;;;97216:44:0;;-1:-1:-1;;;;;202:32:1;;;97216:44:0;;;184:51:1;97119:49:0;;-1:-1:-1;97179:16:0;;97216:15;;;;:29;;157:18:1;;97216:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;97198:62;;:15;:62;:::i;:::-;97179:81;;97290:8;97275:11;:23;97271:398;;97366:1;97354:13;;97405:1;97382:24;;97271:398;;;97503:15;;:40;;-1:-1:-1;;;97503:40:0;;-1:-1:-1;;;;;202:32:1;;;97503:40:0;;;184:51:1;97503:15:0;;;;:25;;157:18:1;;97503:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;97491:52;-1:-1:-1;97581:22:0;97592:11;97581:8;:22;:::i;:::-;97558:45;-1:-1:-1;97632:25:0;97648:9;93472:7;97632:25;:::i;:::-;97618:39;;97271:398;97032:644;;96920:756;;;:::o;126195:541::-;72764:21;:19;:21::i;:::-;126296::::1;126320:25;:23;:25::i;:::-;126296:49;;126356:53;126375:13;126389:19;;126356:18;:53::i;:::-;126443:15;::::0;:53:::1;::::0;-1:-1:-1;;;126443:53:0;;-1:-1:-1;;;;;126443:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;126480:13;;126443:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;126500:1;126443:58;126502:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;126502:39:0::1;;::::0;126435:107:::1;;;;;-1:-1:-1::0;;;126435:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;126590:15:0::1;::::0;:63:::1;::::0;-1:-1:-1;;;126590:63:0;;-1:-1:-1;;;;;126590:15:0;;::::1;::::0;:33:::1;::::0;:63:::1;::::0;126624:13;;126638:14;;126590:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;126664:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;126664:47:0;;-1:-1:-1;;;;;126664:15:0;;::::1;::::0;-1:-1:-1;126664:28:0::1;::::0;-1:-1:-1;126664:47:0::1;::::0;126693:13;;126664:15;;126709:1:::1;::::0;126664:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;126276:460;72808:20:::0;72202:1;73328:22;;73145:213;2788:103;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;97817:655::-:0;72764:21;:19;:21::i;:::-;97887::::1;97911:25;:23;:25::i;:::-;97887:49;;97947:52;97966:13;97980:18;;97947;:52::i;:::-;98025:15;::::0;:42:::1;::::0;-1:-1:-1;;;98025:42:0;;-1:-1:-1;;;;;202:32:1;;;98025:42:0::1;::::0;::::1;184:51:1::0;98025:15:0;;::::1;::::0;:27:::1;::::0;157:18:1;;98025:42:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;98086:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;98086:53:0;;-1:-1:-1;;;;;98086:15:0;;::::1;::::0;-1:-1:-1;98086:36:0::1;::::0;-1:-1:-1;98086:53:0::1;::::0;98123:13;;98086:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;98145:39;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;;;;;;98145:39:0::1;::::0;::::1;::::0;;98086:58:::1;;::::0;98078:107:::1;;;;-1:-1:-1::0;;;98078:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;98253:15:0::1;::::0;:54:::1;::::0;-1:-1:-1;;;98253:54:0;;98233:17:::1;::::0;-1:-1:-1;;;;;98253:15:0::1;::::0;:37:::1;::::0;:54:::1;::::0;98291:13;;98233:17;;98253:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;98318:15;::::0;98233:74;;-1:-1:-1;;;;;;98318:15:0::1;:37;98356:13:::0;98318:15:::1;98374:14;98233:74:::0;98318:15;98374:14:::1;:::i;:::-;98318:71;::::0;-1:-1:-1;;;;;;98318:71:0::1;::::0;;;;;;-1:-1:-1;;;;;22999:32:1;;;98318:71:0::1;::::0;::::1;22981:51:1::0;23048:18;;;23041:34;;;;23091:18;;;23084:34;22954:18;;98318:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;98400:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;98400:47:0;;-1:-1:-1;;;;;98400:15:0;;::::1;::::0;-1:-1:-1;98400:28:0::1;::::0;-1:-1:-1;98400:47:0::1;::::0;98429:13;;98400:15;;;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97870:602;;72808:20:::0;72202:1;73328:22;;73145:213;95937:429;96176:15;;:42;;-1:-1:-1;;;96176:42:0;;96207:10;96176:42;;;184:51:1;95993:7:0;;;;-1:-1:-1;;;;;96176:15:0;;;;:30;;157:18:1;;96176:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;96152:66;-1:-1:-1;;;;;;96233:27:0;;96229:130;;96284:10;96277:17;;;95937:429;:::o;96229:130::-;96334:13;95937:429;-1:-1:-1;95937:429:0:o;131611:635::-;72764:21;:19;:21::i;:::-;131678::::1;131702:25;:23;:25::i;:::-;131678:49;;131738:53;131757:13;131771:19;;131738:18;:53::i;:::-;131825:15;::::0;:53:::1;::::0;-1:-1:-1;;;131825:53:0;;-1:-1:-1;;;;;131825:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;131862:13;;131825:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;131882:2;131825:59;:131;;;;-1:-1:-1::0;131898:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;131898:53:0;;-1:-1:-1;;;;;131898:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;131935:13;;131949:1:::1;::::0;131898:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;::::0;131825:131:::1;131957:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;131957:39:0::1;;::::0;131817:180:::1;;;;;-1:-1:-1::0;;;131817:180:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;132049:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;132049:53:0;;-1:-1:-1;;;;;132049:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;132086:13;;132100:1:::1;::::0;132049:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;132106:1;132049:58:::0;132045:194:::1;;132163:15;::::0;:47:::1;::::0;-1:-1:-1;;;132163:47:0;;-1:-1:-1;;;;;132163:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;132192:13;;132206:1:::1;::::0;132163:15;;:47:::1;;;:::i;132045:194::-;131657:589;72808:20:::0;72202:1;73328:22;;73145:213;124465:570;72764:21;:19;:21::i;:::-;124565::::1;124589:25;:23;:25::i;:::-;124565:49;;124625:52;124644:13;124658:18;;124625;:52::i;:::-;124711:15;::::0;:53:::1;::::0;-1:-1:-1;;;124711:53:0;;-1:-1:-1;;;;;124711:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;124748:13;;124711:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;124768:1;124711:58;124770:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;124770:39:0::1;;::::0;124703:107:::1;;;;;-1:-1:-1::0;;;124703:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;124858:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;124858:47:0;;-1:-1:-1;;;;;124858:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;124887:13;;124858:15;;124903:1:::1;::::0;124858:47:::1;;;:::i;129009:2112::-:0;72764:21;:19;:21::i;:::-;129109::::1;129133:25;:23;:25::i;:::-;129109:49;;129169:53;129188:13;129202:19;;129169:18;:53::i;:::-;129256:15;::::0;:53:::1;::::0;-1:-1:-1;;;129256:53:0;;-1:-1:-1;;;;;129256:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;129293:13;;129256:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;129313:2;129256:59;:130;;;;-1:-1:-1::0;129328:15:0::1;::::0;;:53:::1;::::0;-1:-1:-1;;;129328:53:0;;-1:-1:-1;;;;;129328:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;129365:13;;129328:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;::::0;129256:130:::1;129387:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;129387:39:0::1;;::::0;129248:179:::1;;;;;-1:-1:-1::0;;;129248:179:0::1;;;;;;;;:::i;:::-;;129482:16;129509:17;129537:12;129560:30;;:::i;:::-;129657:26;;:::i;:::-;129750;;:::i;:::-;129838:8;129857:23;;:::i;:::-;129921:15;::::0;:57:::1;::::0;-1:-1:-1;;;129921:57:0;;-1:-1:-1;;;;;129921:15:0;;::::1;::::0;:30:::1;::::0;:57:::1;::::0;129952:13;;129966:11;;129921:57:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;129997:16:::0;;:19;129891:87;;-1:-1:-1;129891:87:0;-1:-1:-1;129997:21:0;;;:46:::1;;-1:-1:-1::0;130022:16:0::1;::::0;::::1;::::0;:19;:21;;129997:46:::1;:71;;;-1:-1:-1::0;130047:16:0;;::::1;::::0;:19;:21;;129997:71:::1;129989:112;;;;-1:-1:-1::0;;;129989:112:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;130153:16:0;;130138:31;;130153:16:::1;130195::::0;;::::1;::::0;130180:12;;::::1;:31:::0;130237:16;;;::::1;::::0;130222:12;;::::1;:31:::0;130324:117;;::::1;::::0;::::1;::::0;;130337:4:::1;130324:117:::0;;130351:3:::1;130324:117:::0;;::::1;::::0;130365:3:::1;130324:117:::0;;;;130377:3:::1;130324:117:::0;;;;;;;;130396:3:::1;130324:117:::0;;;;-1:-1:-1;130324:117:0;;;;;;130425:1:::1;130324:117:::0;;;;;;;;;;130309:12;;::::1;:132:::0;;;;130494:39;;;;::::1;::::0;;130511:2:::1;130494:39:::0;;;;::::1;::::0;;;;;;;130598:6:::1;::::0;;:30;;-1:-1:-1;;;130598:30:0;;-1:-1:-1;;;;;130598:6:0;;::::1;::::0;:19:::1;::::0;:30:::1;::::0;130138:31;;130598:30:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;130554:74:::0;;-1:-1:-1;130554:74:0;;-1:-1:-1;130554:74:0;;-1:-1:-1;130554:74:0;-1:-1:-1;130663:19:0;::::1;;130678:4;130663:19:::0;130659:300:::1;;130704:15;::::0;;:53:::1;::::0;-1:-1:-1;;;130704:53:0;;-1:-1:-1;;;;;130704:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;130741:13;;130704:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;130761:1;130704:58:::0;130700:217:::1;;130822:15;::::0;;:47:::1;::::0;-1:-1:-1;;;130822:47:0;;-1:-1:-1;;;;;130822:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;130851:13;;130822:15;;:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;130700:217;130659:300;;94402:234:::0;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;94509:34:0;::::1;94501:62;;;;-1:-1:-1::0;;;94501:62:0::1;;;;;;;:::i;:::-;94574:15;:54:::0;;-1:-1:-1;;;;;;94574:54:0::1;-1:-1:-1::0;;;;;94574:54:0;;;::::1;::::0;;;::::1;::::0;;94402:234::o;135110:661::-;72764:21;:19;:21::i;:::-;135186::::1;135210:25;:23;:25::i;:::-;135186:49;;135246:52;135265:13;135279:18;;135246;:52::i;:::-;135341:15;::::0;;:53:::1;::::0;-1:-1:-1;;;135341:53:0;;135397:1:::1;::::0;-1:-1:-1;;;;;135341:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;135378:13;;135341:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;:127;;;;-1:-1:-1::0;135411:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;135411:53:0;;135467:1:::1;::::0;-1:-1:-1;;;;;135411:15:0::1;::::0;:36:::1;::::0;:53:::1;::::0;135448:13;;135462:1:::1;::::0;135411:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;135341:127;:197;;;;-1:-1:-1::0;135481:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;135481:53:0;;135537:1:::1;::::0;-1:-1:-1;;;;;135481:15:0::1;::::0;:36:::1;::::0;:53:::1;::::0;135518:13;;135532:1:::1;::::0;135481:53;::::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;135341:197;:268;;;;-1:-1:-1::0;135551:15:0::1;::::0;:53:::1;::::0;-1:-1:-1;;;135551:53:0;;-1:-1:-1;;;;;135551:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;135588:13;;135602:1:::1;::::0;135551:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;::::0;135341:268:::1;135611:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;135611:39:0::1;;::::0;135333:318:::1;;;;;-1:-1:-1::0;;;135333:318:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;135699:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;135699:47:0;;-1:-1:-1;;;;;135699:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;135728:13;;135742:1:::1;::::0;135699:15;;:47:::1;;;:::i;122732:568::-:0;72764:21;:19;:21::i;:::-;122830::::1;122854:25;:23;:25::i;:::-;122830:49;;122890:53;122909:13;122923:19;;122890:18;:53::i;:::-;122977:15;::::0;:53:::1;::::0;-1:-1:-1;;;122977:53:0;;-1:-1:-1;;;;;122977:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;123014:13;;122977:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;123034:1;122977:58;123036:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;123036:39:0::1;;::::0;122969:107:::1;;;;;-1:-1:-1::0;;;122969:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;123124:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;123124:47:0;;-1:-1:-1;;;;;123124:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;123153:13;;123124:15;;123169:1:::1;::::0;123124:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;123251:41;123259:5;123267:9;123279:12;123251:7;:41::i;126744:2124::-:0;72764:21;:19;:21::i;:::-;126830::::1;126854:25;:23;:25::i;:::-;126830:49;;126890:53;126909:13;126923:19;;126890:18;:53::i;:::-;126977:15;::::0;:53:::1;::::0;-1:-1:-1;;;126977:53:0;;-1:-1:-1;;;;;126977:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;127014:13;;126977:15;;:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;127034:1;126977:58;127036:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;127036:39:0::1;;::::0;126969:107:::1;;;;;-1:-1:-1::0;;;126969:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;127124:29:0;::::1;;::::0;;;:14:::1;:29;::::0;;;;127156:15:::1;127124:47:::0;;:29;;127269:30:::1;;:::i;:::-;127366:26;;:::i;:::-;127459;;:::i;:::-;127547:8;127566:23;;:::i;:::-;127630:15;::::0;:57:::1;::::0;-1:-1:-1;;;127630:57:0;;-1:-1:-1;;;;;127630:15:0;;::::1;::::0;:30:::1;::::0;:57:::1;::::0;127661:13;;127675:11;;127630:57:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;127733:16:::0;;:19;127600:87;;-1:-1:-1;127600:87:0;-1:-1:-1;127733:21:0;;;:46:::1;;-1:-1:-1::0;127758:16:0::1;::::0;::::1;::::0;:19;:21;;127733:46:::1;:71;;;-1:-1:-1::0;127783:16:0;;::::1;::::0;:19;:21;;127733:71:::1;127725:112;;;;-1:-1:-1::0;;;127725:112:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;127873:16:0;;127858:31;;127873:16:::1;127915::::0;;::::1;::::0;127900:12;;::::1;:31:::0;127957:16;;;::::1;::::0;127942:12;;::::1;:31:::0;128008:118;;::::1;::::0;::::1;::::0;;128021:4:::1;128008:118:::0;;128035:3:::1;128008:118:::0;;::::1;::::0;128049:2:::1;128008:118:::0;;;;128060:3:::1;128008:118:::0;;;;;;;;128079:3:::1;128008:118:::0;;;;128098:2:::1;128008:118:::0;;;;128109:2:::1;128008:118:::0;;;;;;-1:-1:-1;128008:118:0;;;;;;127993:12;;::::1;:133:::0;;;;128186:48;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;128373:6:::1;::::0;;:30;;-1:-1:-1;;;128373:30:0;;-1:-1:-1;;;;;128373:6:0;;::::1;::::0;:19:::1;::::0;:30:::1;::::0;127858:31;;128373:30:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;128329:74:::0;;-1:-1:-1;128329:74:0;;-1:-1:-1;128329:74:0;;-1:-1:-1;128329:74:0;-1:-1:-1;128438:19:0;::::1;;128453:4;128438:19:::0;128434:315:::1;;128529:15;::::0;:48:::1;::::0;-1:-1:-1;;;128529:48:0;;-1:-1:-1;;;;;128529:15:0;;::::1;::::0;:28:::1;::::0;:48:::1;::::0;128558:13;;128529:15;;128574:2:::1;::::0;128529:48:::1;;;:::i;3046:201::-:0;2026:13;:11;:13::i;:::-;-1:-1:-1;;;;;3135:22:0;::::1;3127:73;;;::::0;-1:-1:-1;;;3127:73:0;;26500:2:1;3127:73:0::1;::::0;::::1;26482:21:1::0;26539:2;26519:18;;;26512:30;26578:34;26558:18;;;26551:62;-1:-1:-1;;;26629:18:1;;;26622:36;26675:19;;3127:73:0::1;26298:402:1::0;3127:73:0::1;3211:28;3230:8;3211:18;:28::i;132252:473::-:0;72764:21;:19;:21::i;:::-;132325::::1;132349:25;:23;:25::i;:::-;132325:49;;132385:52;132404:13;132418:18;;132385;:52::i;:::-;132471:15;::::0;:53:::1;::::0;-1:-1:-1;;;132471:53:0;;-1:-1:-1;;;;;132471:15:0;;::::1;::::0;:36:::1;::::0;:53:::1;::::0;132508:13;;132522:1:::1;::::0;132471:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;132528:1;132471:58;132530:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;132530:39:0::1;;::::0;132463:107:::1;;;;;-1:-1:-1::0;;;132463:107:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;132618:15:0::1;::::0;;:47:::1;::::0;-1:-1:-1;;;132618:47:0;;-1:-1:-1;;;;;132618:15:0;;::::1;::::0;:28:::1;::::0;:47:::1;::::0;132647:13;;132661:1:::1;::::0;132618:15;:47:::1;;;:::i;72844:293::-:0;72246:1;72978:7;;:19;72970:63;;;;-1:-1:-1;;;72970:63:0;;27282:2:1;72970:63:0;;;27264:21:1;27321:2;27301:18;;;27294:30;27360:33;27340:18;;;27333:61;27411:18;;72970:63:0;27080:355:1;72970:63:0;72246:1;73111:7;:18;72844:293::o;96493:223::-;-1:-1:-1;;;;;96578:22:0;;;;;;:14;:22;;;;;;96603:15;-1:-1:-1;96570:79:0;;;;-1:-1:-1;;;96570:79:0;;27642:2:1;96570:79:0;;;27624:21:1;27681:2;27661:18;;;27654:30;27720:28;27700:18;;;27693:56;27766:18;;96570:79:0;27440:350:1;96570:79:0;96685:23;96703:5;96685:15;:23;:::i;:::-;-1:-1:-1;;;;;96660:22:0;;;;;;;:14;:22;;;;;:48;;;;-1:-1:-1;96493:223:0:o;2305:132::-;2186:7;2213:6;-1:-1:-1;;;;;2213:6:0;765:10;2369:23;2361:68;;;;-1:-1:-1;;;2361:68:0;;27997:2:1;2361:68:0;;;27979:21:1;;;28016:18;;;28009:30;28075:34;28055:18;;;28048:62;28127:18;;2361:68:0;27795:356:1;111771:10955:0;111858:21;111882:25;:23;:25::i;:::-;111930:15;;:44;;-1:-1:-1;;;111930:44:0;;-1:-1:-1;;;;;202:32:1;;;111930:44:0;;;184:51:1;111858:49:0;;-1:-1:-1;111918:9:0;;111930:15;;;;:29;;157:18:1;;111930:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;112005:15;;:65;;-1:-1:-1;;;112005:65:0;;111918:56;;-1:-1:-1;111985:17:0;;-1:-1:-1;;;;;112005:15:0;;;;:37;;:65;;112043:13;;112057:12;;112005:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;111985:85;;112230:1;112215:12;:16;112207:49;;;;-1:-1:-1;;;112207:49:0;;28358:2:1;112207:49:0;;;28340:21:1;28397:2;28377:18;;;28370:30;-1:-1:-1;;;28416:18:1;;;28409:50;28476:18;;112207:49:0;28156:344:1;112207:49:0;112280:20;;:::i;:::-;112331:15;;:51;;-1:-1:-1;;;112331:51:0;;-1:-1:-1;;;;;112331:15:0;;;;:30;;:51;;112362:13;;112376:5;;112331:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;112311:71;;112410:15;;:48;;-1:-1:-1;;;112410:48:0;;-1:-1:-1;;;;;112410:15:0;;;;:27;;:48;;112438:13;;112452:5;;112410:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;112393:14;;;:65;112486:15;;:48;;-1:-1:-1;;;112486:48:0;;-1:-1:-1;;;;;112486:15:0;;;;:27;;:48;;112514:13;;112528:5;;112486:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;112469:14;;;;:65;;;;112565:15;;:60;;-1:-1:-1;;;112565:60:0;;-1:-1:-1;;;;;112565:15:0;;;;:39;;:60;;112605:13;;112619:5;;112565:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;112545:17;;;:80;112763:17;;:20;112636:12;;112728:15;;112763:25;;112754:49;;;;-1:-1:-1;;;112754:49:0;;28956:2:1;112754:49:0;;;28938:21:1;28995:2;28975:18;;;28968:30;-1:-1:-1;;;29014:18:1;;;29007:40;29064:18;;112754:49:0;28754:334:1;112754:49:0;112844:2;112830:10;:16;;112822:50;;;;-1:-1:-1;;;112822:50:0;;29295:2:1;112822:50:0;;;29277:21:1;29334:2;29314:18;;;29307:30;-1:-1:-1;;;29353:18:1;;;29346:51;29414:18;;112822:50:0;29093:345:1;112822:50:0;112892:10;112904:1;112892:13;112883:5147;;112917:7;112907:17;;112941:55;112957:5;:14;;;112972:5;:17;;;112990:1;112992:3;112941:15;:55::i;:::-;112926:14;;;:70;;;113044:17;;;;113013:55;;112926:70;113062:1;113064:3;113013:15;:55::i;:::-;112998:14;;;:70;112883:5147;;;113132:10;113144:1;113132:13;113128:4902;;113157:7;113147:17;;113181:55;113197:5;:14;;;113212:5;:17;;;113230:1;113232:3;113181:15;:55::i;:::-;113166:14;;;:70;;;113284:17;;;;113253:55;;113166:70;113302:1;113304:3;113253:15;:55::i;113128:4902::-;113331:10;113343:1;113331:13;113327:4703;;113356:7;113346:17;;113380:55;113396:5;:14;;;113411:5;:17;;;113429:1;113431:3;113380:15;:55::i;:::-;113365:14;;;:70;;;113483:17;;;;113452:55;;113365:70;113501:1;113503:3;113452:15;:55::i;113327:4703::-;113530:10;113542:1;113530:13;113526:4504;;113555:7;113545:17;;113579:55;113595:5;:14;;;113610:5;:17;;;113628:1;113630:3;113579:15;:55::i;:::-;113564:14;;;:70;;;113682:17;;;;113651:55;;113564:70;113700:1;113702:3;113651:15;:55::i;113526:4504::-;113729:10;113741:1;113729:13;113725:4305;;113754:7;113744:17;;113778:55;113794:5;:14;;;113809:5;:17;;;113827:1;113829:3;113778:15;:55::i;:::-;113763:14;;;:70;;;113881:17;;;;113850:55;;113763:70;113899:1;113901:3;113850:15;:55::i;113725:4305::-;113928:10;113940:1;113928:13;113924:4106;;113953:7;113943:17;;113977:55;113993:5;:14;;;114008:5;:17;;;114026:1;114028:3;113977:15;:55::i;113924:4106::-;114155:10;114167:1;114155:13;114151:3879;;114180:7;114170:17;;114204:55;114220:5;:14;;;114235:5;:17;;;114253:1;114255:3;114204:15;:55::i;114151:3879::-;114354:10;114366:1;114354:13;114350:3680;;114379:7;114369:17;;114403:55;114419:5;:14;;;114434:5;:17;;;114452:1;114454:3;114403:15;:55::i;114350:3680::-;114553:10;114565:1;114553:13;114549:3481;;114578:7;114568:17;;114602:55;114618:5;:14;;;114633:5;:17;;;114651:1;114653:3;114602:15;:55::i;114549:3481::-;114752:10;114764:1;114752:13;114748:3282;;114777:7;114767:17;;114801:55;114817:5;:14;;;114832:5;:17;;;114850:1;114852:3;114801:15;:55::i;114748:3282::-;114951:10;114963:2;114951:14;114947:3083;;114977:8;114967:18;;115002:55;115018:5;:14;;;115033:5;:17;;;115051:1;115053:3;115002:15;:55::i;114947:3083::-;115180:10;115192:2;115180:14;115176:2854;;115206:8;115196:18;;115231:55;115247:5;:14;;;115262:5;:17;;;115280:1;115282:3;115231:15;:55::i;115176:2854::-;115381:10;115393:2;115381:14;115377:2653;;115407:8;115397:18;;115432:55;115448:5;:14;;;115463:5;:17;;;115481:1;115483:3;115432:15;:55::i;115377:2653::-;115582:10;115594:2;115582:14;115578:2452;;115608:8;115598:18;;115633:55;115649:5;:14;;;115664:5;:17;;;115682:1;115684:3;115633:15;:55::i;115578:2452::-;115783:10;115795:2;115783:14;115779:2251;;115809:8;115799:18;;115834:55;115850:5;:14;;;115865:5;:17;;;115883:1;115885:3;115834:15;:55::i;115779:2251::-;115984:10;115996:2;115984:14;115980:2050;;116010:8;116000:18;;116035:55;116051:5;:14;;;116066:5;:17;;;116084:1;116086:3;116035:15;:55::i;115980:2050::-;116213:10;116225:2;116213:14;116209:1821;;116239:8;116229:18;;116264:55;116280:5;:14;;;116295:5;:17;;;116313:1;116315:3;116264:15;:55::i;116209:1821::-;116414:10;116426:2;116414:14;116410:1620;;116440:8;116430:18;;116465:55;116481:5;:14;;;116496:5;:17;;;116514:1;116516:3;116465:15;:55::i;116410:1620::-;116615:10;116627:2;116615:14;116611:1419;;116641:8;116631:18;;116666:55;116682:5;:14;;;116697:5;:17;;;116715:1;116717:3;116666:15;:55::i;116611:1419::-;116816:10;116828:2;116816:14;116812:1218;;116842:8;116832:18;;116867:55;116883:5;:14;;;116898:5;:17;;;116916:1;116918:3;116867:15;:55::i;116812:1218::-;117017:10;117029:2;117017:14;117013:1017;;117043:8;117033:18;;117068:55;117084:5;:14;;;117099:5;:17;;;117117:1;117119:3;117068:15;:55::i;117013:1017::-;117246:10;117258:2;117246:14;117242:788;;117272:8;117262:18;;117297:55;117313:5;:14;;;117328:5;:17;;;117346:1;117348:3;117297:15;:55::i;117242:788::-;117447:10;117459:2;117447:14;117443:587;;117473:8;117463:18;;117498:55;117514:5;:14;;;117529:5;:17;;;117547:1;117549:3;117498:15;:55::i;117443:587::-;117648:10;117660:2;117648:14;117644:386;;117674:8;117664:18;;117699:55;117715:5;:14;;;117730:5;:17;;;117748:1;117750:3;117699:15;:55::i;117644:386::-;117849:10;117861:2;117849:14;117845:185;;117875:8;117865:18;;117900:55;117916:5;:14;;;117931:5;:17;;;117949:1;117951:3;117900:15;:55::i;:::-;117885:14;;;:70;;;118003:17;;;;117972:55;;117885:70;118021:1;118023:3;117972:15;:55::i;:::-;117957:14;;;:70;117845:185;118041:17;118072:5;:14;;;:22;;;118061:8;:33;;;;:::i;:::-;118041:53;;118221:7;118205:12;:23;;118197:55;;;;-1:-1:-1;;;118197:55:0;;29645:2:1;118197:55:0;;;29627:21:1;29684:2;29664:18;;;29657:30;-1:-1:-1;;;29703:18:1;;;29696:49;29762:18;;118197:55:0;29443:343:1;118197:55:0;101102:8;118267:12;:30;118263:69;;;-1:-1:-1;101102:8:0;118263:69;118376:23;118392:7;118376:23;;:::i;:::-;;-1:-1:-1;118455:23:0;118376;118455:8;:23;:::i;:::-;118430:14;;;;;:22;;:48;;;;118531:14;:30;;118554:7;;118531:14;:30;;118554:7;;118531:30;:::i;:::-;;;-1:-1:-1;118572:15:0;118580:7;118572:15;;:::i;:::-;118660:17;;:23;;;118572:15;;-1:-1:-1;118687:1:0;118660:28;:77;;;;-1:-1:-1;118696:14:0;;;;:19;101308:8;-1:-1:-1;118660:77:0;118659:209;;;-1:-1:-1;118789:17:0;;:23;;;118816:1;118789:28;:78;;;;-1:-1:-1;118825:14:0;;;;:19;101477:8;-1:-1:-1;118789:78:0;118655:3862;;;119014:50;;:::i;:::-;119079:32;;;119154:15;;:57;;-1:-1:-1;;;119154:57:0;;-1:-1:-1;;;;;202:32:1;;;119154:57:0;;;184:51:1;119154:15:0;;;;:42;;157:18:1;;119154:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;119126:25;;;;:85;;;;119263:64;;-1:-1:-1;;30773:2:1;30769:15;;;30765:53;119263:64:0;;;30753:66:1;;;;119294:15:0;30835:12:1;;;30828:28;119310:16:0;30872:12:1;;;30865:28;30909:12;;119263:64:0;;;-1:-1:-1;;119263:64:0;;;;;;;;;119253:75;;119263:64;119253:75;;;;119226:19;;;:103;119427:11;;119456:17;;119474:14;;;;119427:76;;-1:-1:-1;;;119427:76:0;;119248:81;;-1:-1:-1;;;;;119427:11:0;;;;:28;;:76;;119456:17;;119474:14;119226:12;;119427:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;119385:5;:17;;119384:119;;;;;;;;119532:15;;;;;;;;;-1:-1:-1;;;;;119532:15:0;-1:-1:-1;;;;;119532:30:0;;119563:13;119577:5;119585;:17;;;119532:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;119721:118:0;;;;;;;;119735:14;;;;:19;119721:118;;;-1:-1:-1;;119721:118:0;;;119765:30;93666:8;119765;:30;:::i;:::-;119721:118;;;;119805:32;93737:7;119805:8;:32;:::i;:::-;119721:118;;;119704:5;:14;;:135;;;;119854:15;;;;;;;;;-1:-1:-1;;;;;119854:15:0;-1:-1:-1;;;;;119854:27:0;;119882:13;119897:5;119904;:14;;;119854:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;119997:11:0;;120021:17;;:20;119997:45;;-1:-1:-1;;;119997:45:0;;-1:-1:-1;;;;;119997:11:0;;;;-1:-1:-1;119997:23:0;;-1:-1:-1;119997:45:0;;;;9902:25:1;;;9890:2;9875:18;;9756:177;119997:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;119977:5;:17;;:65;;;;120118:15;;;;;;;;;-1:-1:-1;;;;;120118:15:0;-1:-1:-1;;;;;120118:39:0;;120158:13;120173:5;120180;:17;;;120118:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;120272:55;120288:5;:14;;;120303:5;:17;;;120321:1;120323:3;120272:15;:55::i;:::-;120257:14;;;:70;;;120388:17;;;;120357:55;;120257:70;120406:1;120408:3;120357:15;:55::i;:::-;120342:14;;;:70;;;120473:17;;;;120442:55;;120342:70;120491:1;120493:3;120442:15;:55::i;:::-;120427:14;;;:70;;;120558:17;;;;120527:55;;120427:70;120576:1;120578:3;120527:15;:55::i;:::-;120512:14;;;:70;;;120643:17;;;;120612:55;;120512:70;120661:1;120663:3;120612:15;:55::i;:::-;120597:14;;;:70;120712:17;;:23;;;120739:1;120712:28;120708:484;;120786:17;;:25;;120810:1;;120786:17;:25;;120810:1;;120786:25;:::i;:::-;;;-1:-1:-1;120888:17:0;;:20;120911:5;-1:-1:-1;120884:289:0;;;121017:17;;:20;:28;;121040:5;;121017:28;:::i;:::-;120994:14;;;;:20;;:51;120884:289;;;121125:17;;:20;:24;;121148:1;;121125:24;:::i;:::-;121102:14;;;;:20;;:47;120884:289;121210:17;;:23;;;121237:1;121210:28;121206:439;;121259:17;;:25;;121283:1;;121259:17;:25;;121283:1;;121259:25;:::i;:::-;;;-1:-1:-1;121357:17:0;;:20;121380:5;-1:-1:-1;121353:277:0;;;121484:17;;:20;:28;;121507:5;;121484:28;:::i;:::-;121459:14;;;;:22;;:53;121353:277;;;121586:17;;:20;:24;;121609:1;;121586:24;:::i;:::-;121561:14;;;;:22;;:49;121353:277;121659:15;;;;;;;;;-1:-1:-1;;;;;121659:15:0;-1:-1:-1;;;;;121659:27:0;;121687:13;121702:5;121710;:14;;;121659:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;121827:15:0;;:40;;-1:-1:-1;;;121827:40:0;;-1:-1:-1;;;;;202:32:1;;;121827:40:0;;;184:51:1;121812:12:0;;-1:-1:-1;121827:15:0;;;;-1:-1:-1;121827:25:0;;157:18:1;;121827:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;121965:17;;:20;121812:55;;-1:-1:-1;121989:5:0;;121965:22;;121986:1;;121965:22;:::i;:::-;121964:30;;;;:::i;:::-;122074:15;;:48;;-1:-1:-1;;;122074:48:0;;121958:1;:37;;;121946:50;;;;;-1:-1:-1;;;;;122074:15:0;;:25;;:48;;122100:13;;121946:50;;122074:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;118870:3343;;;118655:3862;;;122359:15;;122410:14;;;;122359:66;;-1:-1:-1;;;122359:66:0;;-1:-1:-1;;;;;122359:15:0;;;;:27;;:66;;122387:13;;122402:5;;122359:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;122440:15:0;;122490:14;;;;;122440:65;;-1:-1:-1;;;122440:65:0;;-1:-1:-1;;;;;122440:15:0;;;;-1:-1:-1;122440:27:0;;-1:-1:-1;122440:65:0;;122468:13;;122483:5;;122440:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;118655:3862;122589:15;;:43;;-1:-1:-1;;;122589:43:0;;-1:-1:-1;;;;;122589:15:0;;;;:22;;:43;;122612:13;;122627:4;;122589:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;122648:66;122666:5;:14;;;122681:5;:17;;;122699:5;:14;;;122648:66;;;;;;;;:::i;:::-;;;;;;;;111847:10879;;;;;;;111771:10955;;;:::o;3407:191::-;3481:16;3500:6;;-1:-1:-1;;;;;3517:17:0;;;-1:-1:-1;;;;;;3517:17:0;;;;;;3550:40;;3500:6;;;;;;;3550:40;;3481:16;3550:40;3470:128;3407:191;:::o;103532:8109::-;103616:21;103640:25;:23;:25::i;:::-;103696:15;;:65;;-1:-1:-1;;;103696:65:0;;103616:49;;-1:-1:-1;103676:17:0;;-1:-1:-1;;;;;103696:15:0;;;;:37;;:65;;103616:49;;103748:12;;103696:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;103676:85;;103808:1;103793:12;:16;103785:49;;;;-1:-1:-1;;;103785:49:0;;28358:2:1;103785:49:0;;;28340:21:1;28397:2;28377:18;;;28370:30;-1:-1:-1;;;28416:18:1;;;28409:50;28476:18;;103785:49:0;28156:344:1;103785:49:0;103858:20;;:::i;:::-;103909:15;;:51;;-1:-1:-1;;;103909:51:0;;-1:-1:-1;;;;;103909:15:0;;;;:30;;:51;;103940:13;;103954:5;;103909:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;103889:71;;103988:15;;:48;;-1:-1:-1;;;103988:48:0;;-1:-1:-1;;;;;103988:15:0;;;;:27;;:48;;104016:13;;104030:5;;103988:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;103971:14;;;:65;104064:15;;:48;;-1:-1:-1;;;104064:48:0;;-1:-1:-1;;;;;104064:15:0;;;;:27;;:48;;104092:13;;104106:5;;104064:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;104047:14;;;;:65;;;;104143:15;;:60;;-1:-1:-1;;;104143:60:0;;-1:-1:-1;;;;;104143:15:0;;;;:39;;:60;;104183:13;;104197:5;;104143:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;104123:17;;;:80;104226:15;;:44;;-1:-1:-1;;;104226:44:0;;-1:-1:-1;;;;;202:32:1;;;104226:44:0;;;184:51:1;104214:9:0;;104226:15;;:29;;157:18:1;;104226:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;104474:17;;:20;104214:56;;-1:-1:-1;104281:10:0;;;;104439:15;;104474:25;;104465:49;;;;-1:-1:-1;;;104465:49:0;;28956:2:1;104465:49:0;;;28938:21:1;28995:2;28975:18;;;28968:30;-1:-1:-1;;;29014:18:1;;;29007:40;29064:18;;104465:49:0;28754:334:1;104465:49:0;104546:2;104533:9;:15;;104525:45;;;;-1:-1:-1;;;104525:45:0;;32417:2:1;104525:45:0;;;32399:21:1;32456:2;32436:18;;;32429:30;-1:-1:-1;;;32475:18:1;;;32468:47;32532:18;;104525:45:0;32215:341:1;104525:45:0;104590:9;104601:1;104590:12;104581:618;;104612:7;104604:15;;104581:618;;;104656:9;104667:1;104656:12;104652:547;;104678:8;104670:16;;104652:547;;;104716:9;104727:1;104716:12;104712:487;;104738:8;104730:16;;104712:487;;;104769:9;104780:1;104769:12;104765:434;;104791:8;104783:16;;104765:434;;;104822:9;104833:1;104822:12;104818:381;;104844:8;104836:16;;104818:381;;;104884:9;104895:1;104884:12;104880:319;;104906:8;104898:16;;104880:319;;;104937:9;104948:1;104937:12;104933:266;;104959:8;104951:16;;104933:266;;;104997:9;105008:1;104997:12;104993:206;;105019:8;105011:16;;104993:206;;;105050:9;105061:1;105050:12;105046:153;;105072:8;105064:16;;105046:153;;;105103:9;105114:1;105103:12;105099:100;;105125:8;105117:16;;105099:100;;;105165:9;105176:2;105165:13;105161:38;;105188:8;105180:16;;105161:38;105238:8;105214:5;:14;;;:21;;;:32;105210:1071;;;105315:14;;;;:19;:27;;105337:5;;105315:27;:::i;:::-;105293:14;;;;:49;105357:13;105365:5;105357:13;;:::i;:::-;;-1:-1:-1;105409:16:0;105420:5;105409:8;:16;:::i;:::-;105385:14;;;;;:21;:40;105454:2;;-1:-1:-1;105210:1071:0;;;101190:8;105526:5;105515:8;105491:5;:14;;;:21;;;:32;;;;:::i;:::-;:40;;;;:::i;:::-;:56;105487:794;;;105595:19;105659:8;105635:5;:14;;;:21;;;:32;;;;:::i;:::-;105618:50;;101190:8;105618:50;:::i;:::-;105706:14;;;;:19;105595:74;;-1:-1:-1;105706:36:0;;105595:74;;105706:36;:::i;:::-;105684:14;;;;:58;105758:22;105766:14;105758:22;;:::i;:::-;;-1:-1:-1;105832:5:0;105811:17;:14;105826:2;105811:17;:::i;:::-;105810:28;;;;:::i;:::-;105795:43;-1:-1:-1;105990:25:0;101190:8;105990;:25;:::i;:::-;105966:14;;;;;:21;:49;-1:-1:-1;105487:794:0;;;106101:14;;;;:19;:27;;106123:5;;106101:27;:::i;:::-;106079:14;;;;:49;106143:13;106151:5;106143:13;;:::i;:::-;;;106219:5;106195;:14;;;:21;;;:29;;;;:::i;:::-;106171:14;;;;;:21;:53;106254:2;;-1:-1:-1;105487:794:0;106300:1356;;;;106368:9;106379:1;106368:12;106364:1292;;106397:67;106413:5;:14;;;106428:5;:17;;;106446:1;106451:12;106448:2;:15;;;;:::i;:::-;106397;:67::i;:::-;106382:14;;;:82;106364:1292;;;106505:9;106516:1;106505:12;106501:1155;;106534:66;106550:5;:14;;;106565:5;:17;;;106583:1;106587:12;106585:1;:14;;;;:::i;106501:1155::-;106632:9;106643:1;106632:12;106628:1028;;106661:66;106677:5;:14;;;106692:5;:17;;;106710:1;106714:12;106712:1;:14;;;;:::i;106628:1028::-;106759:9;106770:1;106759:12;106755:901;;106788:66;106804:5;:14;;;106819:5;:17;;;106837:1;106841:12;106839:1;:14;;;;:::i;106755:901::-;106896:9;106907:1;106896:12;106892:764;;106925:66;106941:5;:14;;;106956:5;:17;;;106974:1;106978:12;106976:1;:14;;;;:::i;106892:764::-;107023:9;107034:1;107023:12;107019:637;;107052:67;107068:5;:14;;;107083:5;:17;;;107101:1;107106:12;107103:2;:15;;;;:::i;107019:637::-;107160:9;107171:1;107160:12;107156:500;;107189:67;107205:5;:14;;;107220:5;:17;;;107238:1;107243:12;107240:2;:15;;;;:::i;107156:500::-;107289:9;107300:1;107289:12;107285:371;;107318:67;107334:5;:14;;;107349:5;:17;;;107367:1;107372:12;107369:2;:15;;;;:::i;107285:371::-;107418:9;107429:1;107418:12;107414:242;;107447:67;107463:5;:14;;;107478:5;:17;;;107496:1;107501:12;107498:2;:15;;;;:::i;107414:242::-;107557:9;107568:2;107557:13;107553:103;;107587:67;107603:5;:14;;;107618:5;:17;;;107636:1;107641:12;107638:2;:15;;;;:::i;107587:67::-;107572:14;;;:82;107553:103;107756:17;;:23;;;107783:1;107756:28;:77;;;;-1:-1:-1;107792:14:0;;;;:19;101308:8;-1:-1:-1;107756:77:0;107755:209;;;-1:-1:-1;107885:17:0;;:23;;;107912:1;107885:28;:78;;;;-1:-1:-1;107921:14:0;;;;:19;101477:8;-1:-1:-1;107885:78:0;107751:3685;;;108110:50;;:::i;:::-;108175:32;;;108250:15;;:57;;-1:-1:-1;;;108250:57:0;;-1:-1:-1;;;;;202:32:1;;;108250:57:0;;;184:51:1;108250:15:0;;;;:42;;157:18:1;;108250:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;108222:25;;;;:85;;;;108359:64;;-1:-1:-1;;30773:2:1;30769:15;;;30765:53;108359:64:0;;;30753:66:1;;;;108390:15:0;30835:12:1;;;30828:28;108406:16:0;30872:12:1;;;30865:28;30909:12;;108359:64:0;;;-1:-1:-1;;108359:64:0;;;;;;;;;108349:75;;108359:64;108349:75;;;;108322:19;;;:103;108523:11;;108552:17;;108570:14;;;;108523:76;;-1:-1:-1;;;108523:76:0;;108344:81;;-1:-1:-1;;;;;108523:11:0;;;;:28;;:76;;108552:17;;108570:14;108322:12;;108523:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;108481:5;:17;;108480:119;;;;;;;;108627:15;;;;;;;;;-1:-1:-1;;;;;108627:15:0;-1:-1:-1;;;;;108627:30:0;;108658:13;108672:5;108680;:17;;;108627:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;108772:118:0;;;;;;;;108786:14;;;;:19;108772:118;;;-1:-1:-1;;108772:118:0;;;108816:30;93666:8;108816;:30;:::i;:::-;108772:118;;;;108856:32;93737:7;108856:8;:32;:::i;:::-;108772:118;;;108755:5;:14;;:135;;;;108905:15;;;;;;;;;-1:-1:-1;;;;;108905:15:0;-1:-1:-1;;;;;108905:27:0;;108933:13;108948:5;108955;:14;;;108905:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;109048:11:0;;109072:17;;:20;109048:45;;-1:-1:-1;;;109048:45:0;;-1:-1:-1;;;;;109048:11:0;;;;-1:-1:-1;109048:23:0;;-1:-1:-1;109048:45:0;;;;9902:25:1;;;9890:2;9875:18;;9756:177;109048:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;109028:5;:17;;:65;;;;109169:15;;;;;;;;;-1:-1:-1;;;;;109169:15:0;-1:-1:-1;;;;;109169:39:0;;109209:13;109224:5;109231;:17;;;109169:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109323:55;109339:5;:14;;;109354:5;:17;;;109372:1;109374:3;109323:15;:55::i;:::-;109308:14;;;:70;;;109439:17;;;;109408:55;;109308:70;109457:1;109459:3;109408:15;:55::i;:::-;109393:14;;;:70;;;109524:17;;;;109493:55;;109393:70;109542:1;109544:3;109493:15;:55::i;:::-;109478:14;;;:70;;;109609:17;;;;109578:55;;109478:70;109627:1;109629:3;109578:15;:55::i;:::-;109563:14;;;:70;;;109694:17;;;;109663:55;;109563:70;109712:1;109714:3;109663:15;:55::i;:::-;109648:14;;;:70;109808:17;;:23;;;109835:1;109808:28;109804:484;;109882:17;;:25;;109906:1;;109882:17;:25;;109906:1;;109882:25;:::i;:::-;;;-1:-1:-1;109984:17:0;;:20;110007:5;-1:-1:-1;109980:289:0;;;110113:17;;:20;:28;;110136:5;;110113:28;:::i;:::-;110090:14;;;;:20;;:51;109980:289;;;110221:17;;:20;:24;;110244:1;;110221:24;:::i;:::-;110198:14;;;;:20;;:47;109980:289;110306:17;;:23;;;110333:1;110306:28;110302:439;;110355:17;;:25;;110379:1;;110355:17;:25;;110379:1;;110355:25;:::i;:::-;;;-1:-1:-1;110453:17:0;;:20;110476:5;-1:-1:-1;110449:277:0;;;110580:17;;:20;:28;;110603:5;;110580:28;:::i;:::-;110555:14;;;;:22;;:53;110449:277;;;110682:17;;:20;:24;;110705:1;;110682:24;:::i;:::-;110657:14;;;;:22;;:49;110449:277;110755:15;;;;;;;;;-1:-1:-1;;;;;110755:15:0;-1:-1:-1;;;;;110755:27:0;;110783:13;110798:5;110806;:14;;;110755:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;110922:15:0;;:40;;-1:-1:-1;;;110922:40:0;;-1:-1:-1;;;;;202:32:1;;;110922:40:0;;;184:51:1;110907:12:0;;-1:-1:-1;110922:15:0;;;;-1:-1:-1;110922:25:0;;157:18:1;;110922:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;111060:17;;:20;110907:55;;-1:-1:-1;111084:5:0;;111060:22;;111081:1;;111060:22;:::i;:::-;111059:30;;;;:::i;:::-;111169:15;;:48;;-1:-1:-1;;;111169:48:0;;111053:1;:37;;;111041:50;;;;;-1:-1:-1;;;;;111169:15:0;;:25;;:48;;111195:13;;111041:50;;111169:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107966:3290;;;107751:3685;;;111278:15;;111329:14;;;;111278:66;;-1:-1:-1;;;111278:66:0;;-1:-1:-1;;;;;111278:15:0;;;;:27;;:66;;111306:13;;111321:5;;111278:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;111359:15:0;;111409:14;;;;;111359:65;;-1:-1:-1;;;111359:65:0;;-1:-1:-1;;;;;111359:15:0;;;;-1:-1:-1;111359:27:0;;-1:-1:-1;111359:65:0;;111387:13;;111402:5;;111359:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107751:3685;111508:15;;:43;;-1:-1:-1;;;111508:43:0;;-1:-1:-1;;;;;111508:15:0;;;;:22;;:43;;111531:13;;111546:4;;111508:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111567:66;111585:5;:14;;;111600:5;:17;;;111618:5;:14;;;111567:66;;;;;;;;:::i;101809:1717::-;101937:25;;:::i;:::-;102045:8;102031:22;;102075:10;102089:1;102075:15;102064:1455;;102133:11;;102116:14;;:28;102112:196;;;102229:11;;102212:14;;102248:4;;102242;;102212:28;;102229:11;102212:28;:::i;:::-;102211:35;;;;:::i;:::-;102210:42;;;;:::i;:::-;102196:11;;:56;;;;:::i;:::-;102179:73;;102064:1455;;102112:196;102292:14;;102275:31;;102064:1455;;;102329:10;102343:1;102329:15;102325:1194;;102393:8;:15;;;102372:11;:18;;;:36;102368:228;;;102528:4;102522;102505:8;:15;;;102484:11;:18;;;:36;;;;:::i;:::-;102483:43;;;;:::i;:::-;102482:50;;;;:::i;:::-;102464:8;:15;;;:68;;;;:::i;:::-;102443:18;;;:89;102325:1194;;102368:228;102576:18;;;;;102555;;;:39;102325:1194;;;102617:10;102631:1;102617:15;102613:906;;102682:8;:16;;;102660:11;:19;;;:38;102656:236;;;102822:4;102816;102798:8;:16;;;102776:11;:19;;;:38;;;;:::i;:::-;102775:45;;;;:::i;:::-;102774:52;;;;:::i;:::-;102755:8;:16;;;:71;;;;:::i;:::-;102733:19;;;:93;102613:906;;102656:236;102871:19;;;;;102849;;;:41;102613:906;;;102913:10;102927:1;102913:15;102909:610;;102976:8;:14;;;102956:11;:17;;;:34;102952:220;;;103106:4;103100;103084:8;:14;;;103064:11;:17;;;:34;;;;:::i;:::-;103063:41;;;;:::i;:::-;103062:48;;;;:::i;:::-;103045:8;:14;;;:65;;;;:::i;:::-;103025:17;;;:85;102909:610;;102952:220;103153:17;;;;;103133;;;:37;102909:610;;;103193:10;103207:1;103193:15;103189:330;;103263:8;:21;;;103236:11;:24;;;:48;103232:276;;;103428:4;103422;103399:8;:21;;;103372:11;:24;;;:48;;;;:::i;:::-;103371:55;;;;:::i;:::-;103370:62;;;;:::i;:::-;103346:8;:21;;;:86;;;;:::i;:::-;103319:24;;;:113;103232:276;;;103482:24;;;;;103455;;;:51;103232:276;101809:1717;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;246:131:1:-;-1:-1:-1;;;;;321:31:1;;311:42;;301:70;;367:1;364;357:12;382:247;441:6;494:2;482:9;473:7;469:23;465:32;462:52;;;510:1;507;500:12;462:52;549:9;536:23;568:31;593:5;568:31;:::i;:::-;618:5;382:247;-1:-1:-1;;;382:247:1:o;860:466::-;937:6;945;953;1006:2;994:9;985:7;981:23;977:32;974:52;;;1022:1;1019;1012:12;974:52;-1:-1:-1;;1067:23:1;;;1187:2;1172:18;;1159:32;;-1:-1:-1;1290:2:1;1275:18;;;1262:32;;860:466;-1:-1:-1;860:466:1:o;1331:346::-;1399:6;1407;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;;1521:23:1;;;1641:2;1626:18;;;1613:32;;-1:-1:-1;1331:346:1:o;1682:251::-;1766:6;1819:2;1807:9;1798:7;1794:23;1790:32;1787:52;;;1835:1;1832;1825:12;1787:52;1874:7;1869:2;1858:9;1854:18;1851:31;1848:51;;;1895:1;1892;1885:12;1848:51;-1:-1:-1;1918:9:1;1682:251;-1:-1:-1;1682:251:1:o;2498:127::-;2559:10;2554:3;2550:20;2547:1;2540:31;2590:4;2587:1;2580:15;2614:4;2611:1;2604:15;2630:255;2702:2;2696:9;2744:6;2732:19;;2781:18;2766:34;;2802:22;;;2763:62;2760:88;;;2828:18;;:::i;:::-;2864:2;2857:22;2630:255;:::o;2890:275::-;2961:2;2955:9;3026:2;3007:13;;-1:-1:-1;;3003:27:1;2991:40;;3061:18;3046:34;;3082:22;;;3043:62;3040:88;;;3108:18;;:::i;:::-;3144:2;3137:22;2890:275;;-1:-1:-1;2890:275:1:o;3170:731::-;3253:6;3306:3;3294:9;3285:7;3281:23;3277:33;3274:53;;;3323:1;3320;3313:12;3274:53;3372:7;3365:4;3354:9;3350:20;3346:34;3336:62;;3394:1;3391;3384:12;3336:62;3473:3;3496:21;3473:3;3496:21;:::i;:::-;3565:20;;;;3539:3;3597:19;;;3594:39;;;3629:1;3626;3619:12;3594:39;3653:9;3671:200;3687:6;3682:3;3679:15;3671:200;;;3779:17;;3809:18;;3856:4;3847:14;;;;3704;3671:200;;;-1:-1:-1;3890:5:1;3170:731;-1:-1:-1;;;;;3170:731:1:o;4114:282::-;-1:-1:-1;;;;;4314:32:1;;;;4296:51;;4378:2;4363:18;;4356:34;4284:2;4269:18;;4114:282::o;4401:273::-;4469:6;4522:2;4510:9;4501:7;4497:23;4493:32;4490:52;;;4538:1;4535;4528:12;4490:52;4570:9;4564:16;4620:4;4613:5;4609:16;4602:5;4599:27;4589:55;;4640:1;4637;4630:12;4679:418;4828:2;4817:9;4810:21;4791:4;4860:6;4854:13;4903:6;4898:2;4887:9;4883:18;4876:34;4962:6;4957:2;4949:6;4945:15;4940:2;4929:9;4925:18;4919:50;5018:1;5013:2;5004:6;4993:9;4989:22;4985:31;4978:42;5088:2;5081;5077:7;5072:2;5064:6;5060:15;5056:29;5045:9;5041:45;5037:54;5029:62;;;4679:418;;;;:::o;5102:370::-;-1:-1:-1;;;;;5336:32:1;;;;5318:51;;5400:2;5385:18;;5378:34;;;;5460:4;5448:17;5443:2;5428:18;;5421:45;5306:2;5291:18;;5102:370::o;5477:339::-;5679:2;5661:21;;;5718:2;5698:18;;;5691:30;-1:-1:-1;;;5752:2:1;5737:18;;5730:45;5807:2;5792:18;;5477:339::o;7233:230::-;7303:6;7356:2;7344:9;7335:7;7331:23;7327:32;7324:52;;;7372:1;7369;7362:12;7324:52;-1:-1:-1;7417:16:1;;7233:230;-1:-1:-1;7233:230:1:o;7747:703::-;7811:5;7859:4;7847:9;7842:3;7838:19;7834:30;7831:50;;;7877:1;7874;7867:12;7831:50;7930:2;7924:9;7972:4;7960:17;;8007:18;7992:34;;8028:22;;;7989:62;7986:88;;;8054:18;;:::i;:::-;8090:2;8083:22;;;8174:16;;8199:23;;8288:2;8273:18;;;8267:25;8308:15;;;8301:32;8384:18;;;8378:25;8419:15;;;8412:32;;;;-1:-1:-1;8123:6:1;7747:703;-1:-1:-1;7747:703:1:o;8455:246::-;8548:6;8601:2;8589:9;8580:7;8576:23;8572:32;8569:52;;;8617:1;8614;8607:12;8569:52;8640:55;8687:7;8676:9;8640:55;:::i;9938:127::-;9999:10;9994:3;9990:20;9987:1;9980:31;10030:4;10027:1;10020:15;10054:4;10051:1;10044:15;10070:125;10135:9;;;10156:10;;;10153:36;;;10169:18;;:::i;:::-;10070:125;;;;:::o;10200:128::-;10267:9;;;10288:11;;;10285:37;;;10302:18;;:::i;10333:481::-;10409:5;10403:12;10398:3;10391:25;10465:4;10458:5;10454:16;10448:23;10441:4;10436:3;10432:14;10425:47;10521:4;10514:5;10510:16;10504:23;10497:4;10492:3;10488:14;10481:47;10577:4;10570:5;10566:16;10560:23;10553:4;10548:3;10544:14;10537:47;10633:4;10626:5;10622:16;10616:23;10609:4;10604:3;10600:14;10593:47;10689:4;10682:5;10678:16;10672:23;10665:4;10660:3;10656:14;10649:47;10745:4;10738:5;10734:16;10728:23;10721:4;10716:3;10712:14;10705:47;10801:4;10794:5;10790:16;10784:23;10777:4;10772:3;10768:14;10761:47;;;10333:481::o;10819:404::-;-1:-1:-1;;;;;11082:32:1;;11064:51;;11146:2;11131:18;;11124:34;;;11051:3;11036:19;;11167:50;11213:2;11198:18;;11190:6;11167:50;:::i;11436:410::-;-1:-1:-1;;;;;11703:32:1;;11685:51;;11767:2;11752:18;;11745:34;;;11672:3;11657:19;;11788:52;11836:2;11821:18;;11813:6;11300:12;;11288:25;;11362:4;11351:16;;;11345:23;11329:14;;;11322:47;11418:4;11407:16;;;11401:23;11385:14;;11378:47;11228:203;12262:1050;12324:5;12372:6;12360:9;12355:3;12351:19;12347:32;12344:52;;;12392:1;12389;12382:12;12344:52;12414:22;;:::i;:::-;12481:16;;12506:22;;12594:2;12579:18;;;12573:25;12614:14;;;12607:31;12704:2;12689:18;;;12683:25;12724:14;;;12717:31;12814:2;12799:18;;;12793:25;12834:14;;;12827:31;12924:3;12909:19;;;12903:26;12945:15;;;12938:32;13036:3;13021:19;;;13015:26;13057:15;;;13050:32;13148:3;13133:19;;;13127:26;13169:15;;;13162:32;13260:3;13245:19;;;13239:26;13281:15;;;13274:32;;;;-1:-1:-1;12405:31:1;12262:1050;-1:-1:-1;12262:1050:1:o;13317:243::-;13408:6;13461:3;13449:9;13440:7;13436:23;13432:33;13429:53;;;13478:1;13475;13468:12;13429:53;13501;13546:7;13535:9;13501:53;:::i;13565:127::-;13626:10;13621:3;13617:20;13614:1;13607:31;13657:4;13654:1;13647:15;13681:4;13678:1;13671:15;13697:112;13729:1;13755;13745:35;;13760:18;;:::i;:::-;-1:-1:-1;13794:9:1;;13697:112::o;13814:504::-;14134:3;14119:19;;14147:41;14123:9;14170:6;14147:41;:::i;:::-;11300:12;;14245:3;14230:19;;11288:25;11362:4;11351:16;;11345:23;11329:14;;;11322:47;11418:4;11407:16;;11401:23;11385:14;;;11378:47;11300:12;;14307:3;14292:19;;11288:25;11362:4;11351:16;;11345:23;11329:14;;;11322:47;11418:4;11407:16;;11401:23;11385:14;;;11378:47;14259:53;11228:203;14985:335;-1:-1:-1;;;;;15226:32:1;;15208:51;;15195:3;15180:19;;15309:4;15301:6;15296:2;15281:18;;15268:46;14985:335;;;;;:::o;15325:1366::-;15471:6;15479;15532:3;15520:9;15511:7;15507:23;15503:33;15500:53;;;15549:1;15546;15539:12;15500:53;15598:7;15591:4;15580:9;15576:20;15572:34;15562:62;;15620:1;15617;15610:12;15562:62;15721:19;15699:2;15721:19;:::i;:::-;15762:3;15803;15792:9;15788:19;15830:7;15822:6;15819:19;15816:39;;;15851:1;15848;15841:12;15816:39;15875:9;15893:178;15909:6;15904:3;15901:15;15893:178;;;15979:47;16018:7;16013:3;15979:47;:::i;:::-;15967:60;;16056:4;16047:14;;;;15935:6;15926:16;15893:178;;;15897:3;16090:5;16080:15;;16139:7;16133:3;16122:9;16118:19;16114:33;16104:61;;16161:1;16158;16151:12;16104:61;16189:1;;-1:-1:-1;16253:2:1;;-1:-1:-1;16275:19:1;16253:2;16275:19;:::i;:::-;16264:30;;16316:7;16303:20;;16360:2;16352:6;16348:15;16388:7;16378:8;16375:21;16372:41;;;16409:1;16406;16399:12;16372:41;16450:209;16468:8;16461:5;16458:19;16450:209;;;16566:12;;16591:20;;16644:4;16633:16;;;;16489;;;;16450:209;;;16454:3;;;16678:7;16668:17;;;15325:1366;;;;;:::o;16696:127::-;16757:10;16752:3;16748:20;16745:1;16738:31;16788:4;16785:1;16778:15;16812:4;16809:1;16802:15;16828:353;17030:2;17012:21;;;17069:2;17049:18;;;17042:30;17108:31;17103:2;17088:18;;17081:59;17172:2;17157:18;;16828:353::o;17186:325::-;17283:5;17306:1;17316:189;17330:4;17327:1;17324:11;17316:189;;;17377:42;17415:3;17406:6;17400:13;17377:42;:::i;:::-;17448:6;17439:16;;;;;17490:4;17478:17;;;;;17350:1;17343:9;17316:189;;;17320:3;;17186:325;;:::o;17516:289::-;17738:4;17723:20;;17752:47;17727:9;17781:6;17752:47;:::i;17810:619::-;17904:6;17912;17920;17928;17981:3;17969:9;17960:7;17956:23;17952:33;17949:53;;;17998:1;17995;17988:12;17949:53;18043:16;;18149:2;18134:18;;18128:25;18224:2;18209:18;;18203:25;18043:16;;-1:-1:-1;18128:25:1;-1:-1:-1;18266:15:1;;18259:23;18247:36;;18237:64;;18297:1;18294;18287:12;18237:64;18393:2;18378:18;;;;18372:25;17810:619;;;;-1:-1:-1;;;17810:619:1:o;19096:303::-;19189:5;19212:1;19222:171;19236:4;19233:1;19230:11;19222:171;;;19295:13;;19283:26;;19338:4;19329:14;;;;19366:17;;;;19256:1;19249:9;19222:171;;19404:858;19894:25;;;19950:2;19935:18;;19928:34;;;20005:14;;19998:22;19993:2;19978:18;;19971:50;20052:2;20037:18;;20030:34;;;19880:4;19865:20;;20073:57;20125:3;20110:19;;20102:6;20073:57;:::i;:::-;20139:54;20187:4;20176:9;20172:20;20164:6;20139:54;:::i;:::-;20202;20250:4;20239:9;20235:20;20227:6;20202:54;:::i;:::-;19404:858;;;;;;;;;;:::o;21370:168::-;21443:9;;;21474;;21491:15;;;21485:22;;21471:37;21461:71;;21512:18;;:::i;21543:561::-;-1:-1:-1;;;;;21784:32:1;;21766:51;;21753:3;21738:19;;21852:2;21837:18;;21897:6;21711:4;21931:167;21945:4;21942:1;21939:11;21931:167;;;22004:13;;21992:26;;22047:2;22038:12;;;;22073:15;;;;21965:1;21958:9;21931:167;;;21935:3;;;21543:561;;;;;:::o;23504:251::-;23574:6;23627:2;23615:9;23606:7;23602:23;23598:32;23595:52;;;23643:1;23640;23633:12;23595:52;23675:9;23669:16;23694:31;23719:5;23694:31;:::i;29791:772::-;29885:6;29938:4;29926:9;29917:7;29913:23;29909:34;29906:54;;;29956:1;29953;29946:12;29906:54;29982:1;30028:7;30021:4;30010:9;30006:20;30002:34;29992:62;;30050:1;30047;30040:12;29992:62;-1:-1:-1;30078:1:1;;30137:4;30161:21;30137:4;30161:21;:::i;:::-;30150:32;-1:-1:-1;30150:32:1;;-1:-1:-1;30232:20:1;;30264:19;;;30261:39;;;30296:1;30293;30286:12;30261:39;30320:9;30338:193;30354:6;30349:3;30346:15;30338:193;;;30446:10;;30469:18;;30516:4;30507:14;;;;30371;30338:193;;;-1:-1:-1;30550:7:1;;29791:772;-1:-1:-1;;;;;29791:772:1:o;30932:919::-;11300:12;;11288:25;;11362:4;11351:16;;;11345:23;11329:14;;;11322:47;11418:4;11407:16;;;11401:23;11385:14;;;11378:47;31270:4;31255:20;;31336:50;31382:2;31371:9;31367:18;31359:6;31336:50;:::i;:::-;31429:6;31423:13;31417:3;31406:9;31402:19;31395:42;31484:4;31476:6;31472:17;31466:24;31525:3;31514:9;31510:19;31601:1;31611:171;31625:4;31622:1;31619:11;31611:171;;;31684:13;;31672:26;;31727:4;31755:17;;;;31718:14;;;;31645:1;31638:9;31611:171;;;31615:3;;;31838:4;31830:6;31826:17;31820:24;31813:4;31802:9;31798:20;31791:54;30932:919;;;;;;:::o;31856:354::-;31958:6;31966;32019:3;32007:9;31998:7;31994:23;31990:33;31987:53;;;32036:1;32033;32026:12;31987:53;32059:55;32106:7;32095:9;32059:55;:::i;:::-;32176:2;32161:18;;;;32155:25;32049:65;;32155:25;;-1:-1:-1;;;31856:354:1:o;32561:120::-;32601:1;32627;32617:35;;32632:18;;:::i;:::-;-1:-1:-1;32666:9:1;;32561:120::o
Swarm Source
ipfs://417c92a8cf3ba30511ddf04298de2ed2226681754ae224ba3bf1bcf473f2f352
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.