333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/driver/oracle/OracleQueryRunner.ts"],"names":[],"mappings":";AAEA,OAAO,EAAC,8BAA8B,EAAC,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAC,0BAA0B,EAAC,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAC,KAAK,EAAC,MAAM,kCAAkC,CAAC;AACvD,OAAO,EAAC,eAAe,EAAC,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAC,UAAU,EAAC,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAC,+BAA+B,EAAC,MAAM,6CAA6C,CAAC;AAC5F,OAAO,EAAC,IAAI,EAAC,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAC;AAG/B,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAC,UAAU,EAAC,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAa,YAAY,EAAC,MAAM,aAAa,CAAC;AAIrD;;GAEG;AACH;IAAuC,6CAAe;IAoBlD,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,2BAAY,MAAoB,EAAE,IAAiC;QAAjC,qBAAA,EAAA,eAAiC;QAAnE,YACI,iBAAO,SAKV;QAJG,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,KAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,KAAI,CAAC,CAAC;QACzC,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;IACrB,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;;OAGG;IACH,mCAAO,GAAP;QAAA,iBAqBC;QApBG,IAAI,IAAI,CAAC,kBAAkB;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,yBAAyB;YAC9B,OAAO,IAAI,CAAC,yBAAyB,CAAC;QAE1C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACnD,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,UAAA,UAAU;gBAChF,KAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;gBACrC,OAAO,KAAI,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,CAAC;SAEN;aAAM,EAAE,SAAS;YACd,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,UAAA,UAAU;gBACjF,KAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;gBACrC,OAAO,KAAI,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,CAAC;SACN;QAED,OAAO,IAAI,CAAC,yBAAyB,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,mCAAO,GAAP;QAAA,iBAcC;QAbG,OAAO,IAAI,OAAO,CAAO,UAAC,EAAE,EAAE,IAAI;YAC9B,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,KAAI,CAAC,kBAAkB,EAAE;gBACzB,KAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAC,GAAQ;oBACnC,IAAI,GAAG;wBACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;oBAErB,EAAE,EAAE,CAAC;gBACT,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,EAAE,EAAE,CAAC;aACR;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACG,4CAAgB,GAAtB,UAAuB,cAAiD;QAAjD,+BAAA,EAAA,iCAAiD;;;;;wBACpE,IAAI,IAAI,CAAC,UAAU;4BACf,MAAM,IAAI,+BAA+B,EAAE,CAAC;wBAEhD,IAAI,IAAI,CAAC,mBAAmB;4BACxB,MAAM,IAAI,8BAA8B,EAAE,CAAC;wBAE/C,yCAAyC;wBACzC,IAAI,cAAc,KAAK,cAAc,IAAI,cAAc,KAAK,gBAAgB,EAAE;4BAC1E,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;yBACrF;wBACD,qBAAM,IAAI,CAAC,KAAK,CAAC,kCAAkC,GAAG,cAAc,CAAC,EAAA;;wBAArE,SAAqE,CAAC;wBACtE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;;;;;KACnC;IAED;;;OAGG;IACG,6CAAiB,GAAvB;;;;;wBACI,IAAI,CAAC,IAAI,CAAC,mBAAmB;4BACzB,MAAM,IAAI,0BAA0B,EAAE,CAAC;wBAE3C,qBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAA;;wBAA1B,SAA0B,CAAC;wBAC3B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;;;;;KACpC;IAED;;;OAGG;IACG,+CAAmB,GAAzB;;;;;wBACI,IAAI,CAAC,IAAI,CAAC,mBAAmB;4BACzB,MAAM,IAAI,0BAA0B,EAAE,CAAC;wBAE3C,qBAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAA;;wBAA5B,SAA4B,CAAC;wBAC7B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;;;;;KACpC;IAED;;OAEG;IACH,iCAAK,GAAL,UAAM,KAAa,EAAE,UAAkB;QAAvC,iBAoCC;QAnCG,IAAI,IAAI,CAAC,UAAU;YACf,MAAM,IAAI,+BAA+B,EAAE,CAAC;QAEhD,OAAO,IAAI,OAAO,CAAC,UAAO,EAAE,EAAE,IAAI;;;;;;;wBAE1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;wBAC1D,mBAAiB,CAAC,IAAI,IAAI,EAAE,CAAC;wBAE7B,OAAO,GAAG,UAAC,GAAQ,EAAE,MAAW;4BAElC,oDAAoD;4BACpD,IAAM,qBAAqB,GAAG,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC;4BACnF,IAAM,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;4BACjC,IAAM,kBAAkB,GAAG,YAAY,GAAG,gBAAc,CAAC;4BACzD,IAAI,qBAAqB,IAAI,kBAAkB,GAAG,qBAAqB;gCACnE,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI,CAAC,CAAC;4BAE5F,IAAI,GAAG,EAAE;gCACL,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI,CAAC,CAAC;gCAC1E,OAAO,IAAI,CAAC,IAAI,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;6BAC7D;4BACD,uEAAuE;4BACvE,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC9D,CAAC,CAAC;wBACI,gBAAgB,GAAG;4BACrB,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;yBACtD,CAAC;wBAEyB,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAAzC,kBAAkB,GAAG,SAAoB;wBAC/C,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;;;;wBAG/E,IAAI,CAAC,KAAG,CAAC,CAAC;;;;;aAEjB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,kCAAM,GAAN,UAAO,KAAa,EAAE,UAAkB,EAAE,KAAgB,EAAE,OAAkB;QAC1E,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACG,wCAAY,GAAlB;;;gBACI,sBAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAC;;;KAC9B;IAED;;;OAGG;IACG,sCAAU,GAAhB,UAAiB,QAAiB;;;gBAC9B,sBAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAC;;;KAC9B;IAED;;OAEG;IACG,uCAAW,GAAjB,UAAkB,QAAgB;;;gBAC9B,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;;;KACjC;IAED;;OAEG;IACG,qCAAS,GAAf,UAAgB,MAAc;;;gBAC1B,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;;;KACjC;IAED;;OAEG;IACG,oCAAQ,GAAd,UAAe,WAAyB;;;;;;wBAC9B,SAAS,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;wBAC1E,GAAG,GAAG,wEAAgE,SAAS,MAAG,CAAC;wBAC1E,qBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;;wBAA9B,MAAM,GAAG,SAAqB;wBACpC,sBAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAC;;;;KACvC;IAED;;OAEG;IACG,qCAAS,GAAf,UAAgB,WAAyB,EAAE,UAAkB;;;;;;wBACnD,SAAS,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;wBAC1E,GAAG,GAAG,2EAAmE,SAAS,iCAA0B,UAAU,MAAG,CAAC;wBACjH,qBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA;;wBAA9B,MAAM,GAAG,SAAqB;wBACpC,sBAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAC;;;;KACvC;IAED;;OAEG;IACG,0CAAc,GAApB,UAAqB,QAAgB,EAAE,UAAoB;;;;4BACvD,qBAAM,IAAI,CAAC,KAAK,CAAC,qCAAkC,QAAQ,OAAG,CAAC,EAAA;;wBAA/D,SAA+D,CAAC;;;;;KACnE;IAED;;OAEG;IACG,wCAAY,GAAlB,UAAmB,QAAgB,EAAE,OAAiB;;;gBAClD,sBAAO,OAAO,CAAC,OAAO,EAAE,EAAC;;;KAC5B;IAED;;OAEG;IACG,wCAAY,GAAlB,UAAmB,OAAe,EAAE,UAAoB;;;gBACpD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;;;KAChF;IAED;;OAEG;IACG,sCAAU,GAAhB,UAAiB,UAAkB,EAAE,OAAiB;;;gBAClD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;;;KAC9E;IAED;;OAEG;IACG,uCAAW,GAAjB,UAAkB,KAAY,EAAE,UAA2B,EAAE,iBAAiC,EAAE,aAA6B;QAA7F,2BAAA,EAAA,kBAA2B;QAAE,kCAAA,EAAA,wBAAiC;QAAE,8BAAA,EAAA,oBAA6B;;;;;;;6BACrH,UAAU,EAAV,wBAAU;wBACW,qBAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAA;;wBAAzC,YAAY,GAAG,SAA0B;wBAC/C,IAAI,YAAY;4BAAE,sBAAO,OAAO,CAAC,OAAO,EAAE,EAAC;;;wBAEzC,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAEhC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;wBAC9D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;wBAE3C,iFAAiF;wBACjF,kIAAkI;wBAClI,IAAI,iBAAiB;4BACjB,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU,IAAI,OAAA,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,EAA3D,CAA2D,CAAC,CAAC;wBAEzG,IAAI,aAAa,EAAE;4BACf,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,KAAK;gCACvB,sFAAsF;gCACtF,IAAI,CAAC,KAAK,CAAC,IAAI;oCACX,KAAK,CAAC,IAAI,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gCACtG,SAAS,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gCAClD,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;4BAC/C,CAAC,CAAC,CAAC;yBACN;wBAED,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;;;;;KACrD;IAED;;OAEG;IACG,qCAAS,GAAf,UAAgB,WAAyB,EAAE,OAAiB,EAAE,eAA+B,EAAE,WAA2B;QAA5D,gCAAA,EAAA,sBAA+B;QAAE,4BAAA,EAAA,kBAA2B;;;;;;;6BAElH,OAAO,EAAP,wBAAO;wBACc,qBAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAA;;wBAA/C,YAAY,GAAG,SAAgC;wBACrD,IAAI,CAAC,YAAY;4BAAE,sBAAO,OAAO,CAAC,OAAO,EAAE,EAAC;;;wBAI1C,iBAAiB,GAAY,eAAe,CAAC;6BACrC,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAGhC,IAAI,WAAW,EAAE;4BACb,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,KAAK;gCACvB,SAAS,CAAC,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gCACzC,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;4BACxD,CAAC,CAAC,CAAC;yBACN;wBAED,iGAAiG;wBACjG,kIAAkI;wBAClI,IAAI,eAAe;4BACf,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,EAAzD,CAAyD,CAAC,CAAC;wBAEvG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;wBACzC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;wBAEhE,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;;;;;KACrD;IAED;;OAEG;IACG,sCAAU,GAAhB,UAAiB,IAAU;;;;;;wBACjB,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAChC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;wBACzC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;wBACnD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;wBACzC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;wBACrD,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;;;;;KACrD;IAED;;OAEG;IACG,oCAAQ,GAAd,UAAe,MAAmB;;;;;;wBACxB,QAAQ,GAAG,MAAM,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;wBAClD,qBAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAA;;wBAAzC,IAAI,GAAG,SAAkC;wBAEzC,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAChC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;wBACnD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;wBACvC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;wBACrD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC3C,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;;;;;KACrD;IAED;;OAEG;IACG,uCAAW,GAAjB,UAAkB,cAA4B,EAAE,cAA4B;;;;;;;wBAClE,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;6BACf,CAAA,cAAc,YAAY,KAAK,CAAA,EAA/B,wBAA+B;wBAAG,KAAA,cAAc,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAA;;wBAAzC,KAAA,SAAyC,CAAA;;;wBAAvG,QAAQ,KAA+F;wBACzG,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;wBAEhC,IAAI,cAAc,YAAY,KAAK,EAAE;4BACjC,QAAQ,GAAG,cAAc,CAAC;yBAC7B;6BAAM;4BACH,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC;yBAClC;wBAED,eAAe;wBACf,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,uBAAgB,QAAQ,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;wBACzF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,uBAAgB,QAAQ,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;wBAE3F,gCAAgC;wBAChC,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC9B,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC;4BAEjE,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;4BACjF,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;4BAEvF,gBAAgB;4BAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,+BAAwB,SAAS,gBAAS,SAAS,OAAG,CAAC,CAAC,CAAC;4BAC/G,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,+BAAwB,SAAS,gBAAS,SAAS,OAAG,CAAC,CAAC,CAAC;yBACpH;wBAED,4BAA4B;wBAC5B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;4BAC3B,4BAA4B;4BAC5B,IAAM,aAAa,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;4BAExG,gBAAgB;4BAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,+BAAwB,MAAM,CAAC,IAAI,gBAAS,aAAa,OAAG,CAAC,CAAC,CAAC;4BACrH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,+BAAwB,aAAa,gBAAS,MAAM,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;4BAEvH,0BAA0B;4BAC1B,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC;wBAChC,CAAC,CAAC,CAAC;wBAEH,2BAA2B;wBAC3B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,KAAK;4BAC1B,4BAA4B;4BAC5B,IAAM,YAAY,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;4BAExG,gBAAgB;4BAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,uBAAgB,YAAY,OAAG,CAAC,CAAC,CAAC;4BACrF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,YAAY,uBAAgB,KAAK,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;4BAEvF,0BAA0B;4BAC1B,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;wBAC9B,CAAC,CAAC,CAAC;wBAEH,iCAAiC;wBACjC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,UAAU;4BACnC,4BAA4B;4BAC5B,IAAM,iBAAiB,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;4BAE1G,gBAAgB;4BAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,+BAAwB,UAAU,CAAC,IAAI,gBAAS,iBAAiB,OAAG,CAAC,CAAC,CAAC;4BAC7H,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,QAAQ,CAAC,IAAI,+BAAwB,iBAAiB,gBAAS,UAAU,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;4BAE/H,0BAA0B;4BAC1B,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;wBACxC,CAAC,CAAC,CAAC;wBAEH,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;wBAElD,oDAAoD;wBACpD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;wBAC9B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;;;;;KAC/C;IAED;;OAEG;IACG,qCAAS,GAAf,UAAgB,WAAyB,EAAE,MAAmB;;;;;;6BAC5C,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC5B,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAEhC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,eAAS,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAG,CAAC,CAAC,CAAC;wBAClG,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,yBAAkB,MAAM,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;wBAExF,0CAA0C;wBAC1C,IAAI,MAAM,CAAC,SAAS,EAAE;4BACZ,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;4BAClD,wEAAwE;4BACxE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gCACrB,WAAS,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;gCACpH,gBAAc,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAChF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,QAAM,OAAG,CAAC,CAAC,CAAC;gCACrF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,QAAM,wBAAkB,aAAW,MAAG,CAAC,CAAC,CAAC;6BACtH;4BAED,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BACtB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;4BACpH,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAChF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,MAAM,wBAAkB,WAAW,MAAG,CAAC,CAAC,CAAC;4BACjH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,MAAM,OAAG,CAAC,CAAC,CAAC;yBAC1F;wBAGK,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAtE,CAAsE,CAAC,CAAC;wBAC9H,IAAI,WAAW,EAAE;4BACb,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;4BACxE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;4BACxD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;yBACpD;wBAED,2BAA2B;wBAC3B,IAAI,MAAM,CAAC,QAAQ,EAAE;4BACX,gBAAgB,GAAG,IAAI,WAAW,CAAC;gCACrC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gCACpF,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;6BAC7B,CAAC,CAAC;4BACH,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;4BAC3C,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,gBAAgB,CAAC,IAAI,qBAAc,MAAM,CAAC,IAAI,QAAI,CAAC,CAAC,CAAC;4BAC7H,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,gBAAgB,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;yBACzG;wBAED,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;wBAElD,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBAC9B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;;;;KAC/C;IAED;;OAEG;IACG,sCAAU,GAAhB,UAAiB,WAAyB,EAAE,OAAsB;;;;;4BAC9D,qBAAM,YAAY,CAAC,aAAa,CAAC,OAAO,EAAE,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,EAAnC,CAAmC,CAAC,EAAA;;wBAAxF,SAAwF,CAAC;;;;;KAC5F;IAED;;OAEG;IACG,wCAAY,GAAlB,UAAmB,WAAyB,EAAE,oBAAwC,EAAE,oBAAwC;;;;;;6BAC9G,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,SAAS,GAAG,oBAAoB,YAAY,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,oBAAoB,EAA/B,CAA+B,CAAC,CAAC;wBAChJ,IAAI,CAAC,SAAS;4BACV,MAAM,IAAI,KAAK,CAAC,cAAW,oBAAoB,kCAA2B,KAAK,CAAC,IAAI,cAAU,CAAC,CAAC;wBAEhG,SAAS,GAA0B,SAAS,CAAC;wBACjD,IAAI,oBAAoB,YAAY,WAAW,EAAE;4BAC7C,SAAS,GAAG,oBAAoB,CAAC;yBACpC;6BAAM;4BACH,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;4BAC9B,SAAS,CAAC,IAAI,GAAG,oBAAoB,CAAC;yBACzC;wBAED,qBAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA;;wBAApD,SAAoD,CAAC;;;;;KACxD;IAED;;OAEG;IACG,wCAAY,GAAlB,UAAmB,WAAyB,EAAE,oBAAwC,EAAE,SAAsB;;;;;;;6BAC5F,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC7F,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC1B,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAE1B,SAAS,GAAG,oBAAoB,YAAY,WAAW;4BACzD,CAAC,CAAC,oBAAoB;4BACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAApC,CAAoC,CAAC,CAAC;wBACzE,IAAI,CAAC,SAAS;4BACV,MAAM,IAAI,KAAK,CAAC,cAAW,oBAAoB,kCAA2B,KAAK,CAAC,IAAI,cAAU,CAAC,CAAC;6BAEhG,CAAA,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,kBAAkB,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAA,EAA1K,wBAA0K;wBAC1K,qGAAqG;wBACrG,kDAAkD;wBAClD,qBAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;wBAFvC,qGAAqG;wBACrG,kDAAkD;wBAClD,SAAuC,CAAC;wBACxC,qBAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAA;;wBAAtC,SAAsC,CAAC;wBAEvC,sBAAsB;wBACtB,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;;;wBAG5B,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;4BACnC,gBAAgB;4BAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,2BAAoB,SAAS,CAAC,IAAI,gBAAS,SAAS,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;4BAClH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,2BAAoB,SAAS,CAAC,IAAI,gBAAS,SAAS,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;4BAEpH,uCAAuC;4BACvC,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI,EAAE;gCACxB,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;gCAG5C,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC;gCACxD,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gCAE1F,+CAA+C;gCAC/C,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC3D,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gCAG3B,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gCAE1F,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,+BAAwB,SAAS,gBAAS,SAAS,OAAG,CAAC,CAAC,CAAC;gCAC5G,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,+BAAwB,SAAS,gBAAS,SAAS,OAAG,CAAC,CAAC,CAAC;6BACjH;4BAED,4BAA4B;4BAC5B,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAA,MAAM;gCACnD,4BAA4B;gCAC5B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gCACzE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gCACxC,IAAM,aAAa,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gCAE3G,gBAAgB;gCAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,+BAAwB,MAAM,CAAC,IAAI,gBAAS,aAAa,OAAG,CAAC,CAAC,CAAC;gCAClH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,+BAAwB,aAAa,gBAAS,MAAM,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;gCAEpH,0BAA0B;gCAC1B,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC;4BAChC,CAAC,CAAC,CAAC;4BAEH,2BAA2B;4BAC3B,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;gCAClD,4BAA4B;gCAC5B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gCACvE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gCACvC,IAAM,YAAY,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gCAE3G,gBAAgB;gCAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,uBAAgB,YAAY,OAAG,CAAC,CAAC,CAAC;gCACrF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,YAAY,uBAAgB,KAAK,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;gCAEvF,0BAA0B;gCAC1B,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;4BAC9B,CAAC,CAAC,CAAC;4BAEH,iCAAiC;4BACjC,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAA,UAAU;gCAC3D,4BAA4B;gCAC5B,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gCACjF,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gCAC5C,IAAM,iBAAiB,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;gCAE7G,gBAAgB;gCAChB,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,+BAAwB,UAAU,CAAC,IAAI,gBAAS,iBAAiB,OAAG,CAAC,CAAC,CAAC;gCAC1H,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,+BAAwB,iBAAiB,gBAAS,UAAU,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;gCAE5H,0BAA0B;gCAC1B,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAC;4BACxC,CAAC,CAAC,CAAC;4BAGG,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAA9B,CAA8B,CAAC,CAAC;4BAC1F,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAe,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;4BACxF,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;yBACnC;wBAED,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;4BAC9C,SAAS,GAAW,EAAE,CAAC;4BACvB,WAAW,GAAW,EAAE,CAAC;4BACzB,UAAU,GAAY,EAAE,CAAC;4BACzB,YAAY,GAAY,EAAE,CAAC;4BAE/B,0BAA0B;4BAC1B,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE;gCAC/D,SAAS,GAAG,aAAW,SAAS,CAAC,OAAS,CAAC;gCAE3C,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE;oCAC/D,WAAW,GAAG,aAAW,SAAS,CAAC,OAAS,CAAC;iCAChD;qCAAM;oCACH,WAAW,GAAG,cAAc,CAAC;iCAChC;6BAEJ;iCAAM,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE;gCACtE,SAAS,GAAG,cAAc,CAAC;gCAC3B,WAAW,GAAG,aAAW,SAAS,CAAC,OAAS,CAAC;6BAChD;4BAED,sCAAsC;4BACtC,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE;gCAC/C,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE;oCAC/B,UAAU,GAAG,MAAM,CAAC;oCACpB,YAAY,GAAG,UAAU,CAAC;iCAC7B;qCAAM;oCACH,UAAU,GAAG,UAAU,CAAC;oCACxB,YAAY,GAAG,MAAM,CAAC;iCACzB;6BACJ;4BAED,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,oBAAa,SAAS,CAAC,IAAI,WAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAI,SAAS,SAAI,UAAY,CAAC,CAAC,CAAC;4BACnK,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,oBAAa,SAAS,CAAC,IAAI,WAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAI,WAAW,SAAI,YAAc,CAAC,CAAC,CAAC;yBAC5K;wBAED,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE;4BACvC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;4BAElD,2EAA2E;4BAC3E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gCACrB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;gCACpH,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAChF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,MAAM,OAAG,CAAC,CAAC,CAAC;gCACrF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,MAAM,wBAAkB,WAAW,MAAG,CAAC,CAAC,CAAC;6BACtH;4BAED,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI,EAAE;gCAC9B,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCAEzB,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAA9B,CAA8B,CAAC,CAAC;gCAClF,MAAO,CAAC,SAAS,GAAG,IAAI,CAAC;gCACnB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;gCACpH,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAChF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,MAAM,wBAAkB,WAAW,MAAG,CAAC,CAAC,CAAC;gCACjH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,MAAM,OAAG,CAAC,CAAC,CAAC;6BAE1F;iCAAM;gCACG,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAzB,CAAyB,CAAC,CAAC;gCAC1E,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,aAAc,CAAC,EAAE,CAAC,CAAC,CAAC;gCAG3D,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAA9B,CAA8B,CAAC,CAAC;gCAClF,MAAO,CAAC,SAAS,GAAG,KAAK,CAAC;gCAE1B,gEAAgE;gCAChE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oCACrB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;oCACpH,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oCAChF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,MAAM,wBAAkB,WAAW,MAAG,CAAC,CAAC,CAAC;oCACjH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,MAAM,OAAG,CAAC,CAAC,CAAC;iCAC1F;6BACJ;yBACJ;wBAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;4BAC3C,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE;gCACvB,gBAAgB,GAAG,IAAI,WAAW,CAAC;oCACrC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oCACvF,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;iCAChC,CAAC,CAAC;gCACH,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gCAC3C,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,gBAAgB,CAAC,IAAI,qBAAc,SAAS,CAAC,IAAI,QAAI,CAAC,CAAC,CAAC;gCAChI,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,gBAAgB,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;6BAEzG;iCAAM;gCACG,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM;oCACpD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,UAAU,IAAI,OAAA,UAAU,KAAK,SAAS,CAAC,IAAI,EAA7B,CAA6B,CAAC,CAAC;gCACrH,CAAC,CAAC,CAAC;gCACH,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;gCAC9E,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,gBAAiB,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;gCACrG,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,gBAAiB,CAAC,IAAI,qBAAc,SAAS,CAAC,IAAI,QAAI,CAAC,CAAC,CAAC;6BACtI;yBACJ;wBAED,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;wBAClD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;;;;;KAEnD;IAED;;OAEG;IACG,yCAAa,GAAnB,UAAoB,WAAyB,EAAE,cAAoE;;;;;4BAC/G,qBAAM,YAAY,CAAC,aAAa,CAAC,cAAc,EAAE,UAAA,aAAa,IAAI,OAAA,KAAI,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,EAAhF,CAAgF,CAAC,EAAA;;wBAAnJ,SAAmJ,CAAC;;;;;KACvJ;IAED;;OAEG;IACG,sCAAU,GAAhB,UAAiB,WAAyB,EAAE,YAAgC;;;;;;6BAC1D,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,MAAM,GAAG,YAAY,YAAY,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;wBACzG,IAAI,CAAC,MAAM;4BACP,MAAM,IAAI,KAAK,CAAC,cAAW,YAAY,oCAA6B,KAAK,CAAC,IAAI,OAAG,CAAC,CAAC;wBAEjF,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC5B,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAEhC,8BAA8B;wBAC9B,IAAI,MAAM,CAAC,SAAS,EAAE;4BACZ,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;4BAChI,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,aAAa,IAAI,OAAA,OAAI,aAAa,CAAC,IAAI,OAAG,EAAzB,CAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC1G,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,WAAW,CAAC,IAAI,6BAAsB,MAAM,OAAG,CAAC,CAAC,CAAC;4BAC3F,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,WAAW,CAAC,IAAI,4BAAqB,MAAM,wBAAkB,WAAW,MAAG,CAAC,CAAC,CAAC;4BAGnH,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;4BAC9D,WAAY,CAAC,SAAS,GAAG,KAAK,CAAC;4BAE/B,mFAAmF;4BACnF,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gCACjC,WAAS,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;gCAChI,gBAAc,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,aAAa,IAAI,OAAA,OAAI,aAAa,CAAC,IAAI,OAAG,EAAzB,CAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAC1G,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,WAAW,CAAC,IAAI,4BAAqB,QAAM,wBAAkB,aAAW,MAAG,CAAC,CAAC,CAAC;gCACvH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,WAAW,CAAC,IAAI,6BAAsB,QAAM,OAAG,CAAC,CAAC,CAAC;6BAChG;yBACJ;wBAGK,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAtE,CAAsE,CAAC,CAAC;wBAC9H,IAAI,WAAW,EAAE;4BACb,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;4BAC/C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;yBAC7D;wBAGK,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAA7F,CAA6F,CAAC,CAAC;wBACpJ,IAAI,WAAW,EAAE;4BACb,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;4BACtE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;4BAChE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;yBACvE;wBAGK,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAxE,CAAwE,CAAC,CAAC;wBAClI,IAAI,YAAY,EAAE;4BACd,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;4BACzE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;4BAClE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;yBACzE;wBAED,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,yBAAkB,MAAM,CAAC,IAAI,OAAG,CAAC,CAAC,CAAC;wBACtF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,eAAS,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAG,CAAC,CAAC,CAAC;wBAEpG,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;wBAElD,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBACjC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;;;;KAC/C;IAED;;OAEG;IACG,uCAAW,GAAjB,UAAkB,WAAyB,EAAE,OAAsB;;;;;4BAC/D,qBAAM,YAAY,CAAC,aAAa,CAAC,OAAO,EAAE,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAApC,CAAoC,CAAC,EAAA;;wBAAzF,SAAyF,CAAC;;;;;KAC7F;IAED;;OAEG;IACG,4CAAgB,GAAtB,UAAuB,WAAyB,EAAE,WAAqB;;;;;;6BACrD,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wBAE5B,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;wBAExD,4GAA4G;wBAC5G,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;4BAC9B,IAAI,WAAW,CAAC,IAAI,CAAC,UAAA,UAAU,IAAI,OAAA,UAAU,KAAK,MAAM,CAAC,IAAI,EAA1B,CAA0B,CAAC;gCAC1D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;wBAChC,CAAC,CAAC,CAAC;wBACG,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;wBAEjD,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;;;;KAC/C;IAED;;OAEG;IACG,6CAAiB,GAAvB,UAAwB,WAAyB,EAAE,OAAsB;;;;;;6BACvD,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC;wBACjD,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC5B,SAAS,GAAY,EAAE,CAAC;wBACxB,WAAW,GAAY,EAAE,CAAC;wBAG1B,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;wBAClD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;4BACrB,WAAS,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;4BACpH,sBAAoB,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACtF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,QAAM,OAAG,CAAC,CAAC,CAAC;4BACrF,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,QAAM,wBAAkB,mBAAiB,MAAG,CAAC,CAAC,CAAC;yBAC5H;wBAED,2BAA2B;wBAC3B,WAAW,CAAC,OAAO;6BACd,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAvC,CAAuC,CAAC;6BACzD,OAAO,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,SAAS,GAAG,IAAI,EAAvB,CAAuB,CAAC,CAAC;wBAE1C,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;wBACtF,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,OAAI,UAAU,OAAG,EAAjB,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtF,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,MAAM,wBAAkB,iBAAiB,MAAG,CAAC,CAAC,CAAC;wBACvH,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,MAAM,OAAG,CAAC,CAAC,CAAC;wBAEvF,qBAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;wBAClD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;;;;;KAC/C;IAED;;OAEG;IACG,0CAAc,GAApB,UAAqB,WAAyB;;;;;;6BAC5B,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;wBACnC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;wBAC9F,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,MAAM;4BAC/B,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;wBAC7B,CAAC,CAAC,CAAC;;;;;KACN;IAED;;OAEG;IACG,kDAAsB,GAA5B,UAA6B,WAAyB,EAAE,gBAA6B;;;;;;6BACnE,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAEjG,mGAAmG;wBACnG,IAAI,CAAC,gBAAgB,CAAC,IAAI;4BACtB,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;wBAEpH,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;wBAC7D,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;wBACnE,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;;;;;KAC/C;IAED;;OAEG;IACG,mDAAuB,GAA7B,UAA8B,WAAyB,EAAE,iBAAgC;;;;;;;wBAC/E,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAA,gBAAgB,IAAI,OAAA,KAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAA1D,CAA0D,CAAC,CAAC;wBACvH,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,gDAAoB,GAA1B,UAA2B,WAAyB,EAAE,YAAgC;;;;;;6BACpE,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,gBAAgB,GAAG,YAAY,YAAY,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,YAAY,EAAvB,CAAuB,CAAC,CAAC;wBAC/H,IAAI,CAAC,gBAAgB;4BACjB,MAAM,IAAI,KAAK,CAAC,uDAAqD,KAAK,CAAC,IAAM,CAAC,CAAC;wBAEjF,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;wBAC3D,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;wBACrE,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;;;;;KAClD;IAED;;OAEG;IACG,iDAAqB,GAA3B,UAA4B,WAAyB,EAAE,iBAAgC;;;;;;;wBAC7E,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAA,gBAAgB,IAAI,OAAA,KAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAxD,CAAwD,CAAC,CAAC;wBACrH,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,iDAAqB,GAA3B,UAA4B,WAAyB,EAAE,eAA2B;;;;;;6BAChE,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAEjG,mGAAmG;wBACnG,IAAI,CAAC,eAAe,CAAC,IAAI;4BACrB,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,UAAW,CAAC,CAAC;wBAEjH,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBAC3D,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBACjE,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;;;;;KAC7C;IAED;;OAEG;IACG,kDAAsB,GAA5B,UAA6B,WAAyB,EAAE,gBAA8B;;;;;;;wBAC5E,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAA,eAAe,IAAI,OAAA,KAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,EAAxD,CAAwD,CAAC,CAAC;wBACnH,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,+CAAmB,GAAzB,UAA0B,WAAyB,EAAE,WAA8B;;;;;;6BACjE,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,eAAe,GAAG,WAAW,YAAY,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,WAAW,EAAtB,CAAsB,CAAC,CAAC;wBACzH,IAAI,CAAC,eAAe;4BAChB,MAAM,IAAI,KAAK,CAAC,sDAAoD,KAAK,CAAC,IAAM,CAAC,CAAC;wBAEhF,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBACzD,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBACnE,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;;;;;KAChD;IAED;;OAEG;IACG,gDAAoB,GAA1B,UAA2B,WAAyB,EAAE,gBAA8B;;;;;;;wBAC1E,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAA,eAAe,IAAI,OAAA,KAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC,EAAtD,CAAsD,CAAC,CAAC;wBACjH,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,qDAAyB,GAA/B,UAAgC,WAAyB,EAAE,mBAAmC;;;gBAC1F,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;;;KACrE;IAED;;OAEG;IACG,sDAA0B,GAAhC,UAAiC,WAAyB,EAAE,oBAAsC;;;gBAC9F,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;;;KACrE;IAED;;OAEG;IACG,mDAAuB,GAA7B,UAA8B,WAAyB,EAAE,eAAsC;;;gBAC3F,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;;;KACrE;IAED;;OAEG;IACG,oDAAwB,GAA9B,UAA+B,WAAyB,EAAE,oBAAsC;;;gBAC5F,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;;;KACrE;IAED;;OAEG;IACG,4CAAgB,GAAtB,UAAuB,WAAyB,EAAE,UAA2B;;;;;;6BAC3D,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAEjG,gFAAgF;wBAChF,IAAI,CAAC,UAAU,CAAC,IAAI;4BAChB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;wBAElG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;wBACjD,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;wBACvD,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;;;;;KACnC;IAED;;OAEG;IACG,6CAAiB,GAAvB,UAAwB,WAAyB,EAAE,WAA8B;;;;;;;wBACvE,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,KAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,EAA9C,CAA8C,CAAC,CAAC;wBAC/F,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,0CAAc,GAApB,UAAqB,WAAyB,EAAE,gBAAwC;;;;;;6BACtE,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,UAAU,GAAG,gBAAgB,YAAY,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAA5B,CAA4B,CAAC,CAAC;wBAC/I,IAAI,CAAC,UAAU;4BACX,MAAM,IAAI,KAAK,CAAC,iDAA+C,KAAK,CAAC,IAAM,CAAC,CAAC;wBAE3E,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;wBAC/C,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;wBACzD,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;;;;;KACtC;IAED;;OAEG;IACG,2CAAe,GAArB,UAAsB,WAAyB,EAAE,WAA8B;;;;;;;wBACrE,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,EAA5C,CAA4C,CAAC,CAAC;wBAC7F,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,uCAAW,GAAjB,UAAkB,WAAyB,EAAE,KAAiB;;;;;;6BAC5C,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAEjG,sFAAsF;wBACtF,IAAI,CAAC,KAAK,CAAC,IAAI;4BACX,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBAEhG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBACvC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;wBACtC,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;;;;KACzB;IAED;;OAEG;IACG,yCAAa,GAAnB,UAAoB,WAAyB,EAAE,OAAqB;;;;;;;wBAC1D,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAApC,CAAoC,CAAC,CAAC;wBAC5E,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;OAEG;IACG,qCAAS,GAAf,UAAgB,WAAyB,EAAE,WAA8B;;;;;;6BACvD,CAAA,WAAW,YAAY,KAAK,CAAA,EAA5B,wBAA4B;wBAAG,KAAA,WAAW,CAAA;;4BAAG,qBAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAA;;wBAAtC,KAAA,SAAsC,CAAA;;;wBAA3F,KAAK,KAAsF;wBAC3F,KAAK,GAAG,WAAW,YAAY,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,WAAW,EAAtB,CAAsB,CAAC,CAAC;wBAChH,IAAI,CAAC,KAAK;4BACN,MAAM,IAAI,KAAK,CAAC,2CAAyC,KAAK,CAAC,IAAM,CAAC,CAAC;wBAErE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;wBAC9B,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC/C,qBAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAA;;wBAAnC,SAAmC,CAAC;wBACpC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;;;KAC5B;IAED;;OAEG;IACG,uCAAW,GAAjB,UAAkB,WAAyB,EAAE,OAAqB;;;;;;;wBACxD,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,EAAlC,CAAkC,CAAC,CAAC;wBAC1E,qBAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAA;;wBAA3B,SAA2B,CAAC;;;;;KAC/B;IAED;;;OAGG;IACG,sCAAU,GAAhB,UAAiB,SAAiB;;;;4BAC9B,qBAAM,IAAI,CAAC,KAAK,CAAC,sBAAmB,SAAS,OAAG,CAAC,EAAA;;wBAAjD,SAAiD,CAAC;;;;;KACrD;IAED;;OAEG;IACG,yCAAa,GAAnB;;;;;;4BACI,qBAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA;;wBAA7B,SAA6B,CAAC;;;;wBAEpB,cAAc,GAAG,6EAAuE,CAAC;wBACtD,qBAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAA;;wBAAnE,eAAe,GAAoB,SAAgC;wBACzE,qBAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAA1B,CAA0B,CAAC,CAAC,EAAA;;wBAA3E,SAA2E,CAAC;wBAEtE,eAAe,GAAG,oGAA8F,CAAC;wBAC7E,qBAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAA;;wBAArE,gBAAgB,GAAoB,SAAiC;wBAC3E,qBAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAA1B,CAA0B,CAAC,CAAC,EAAA;;wBAA5E,SAA4E,CAAC;wBAC7E,qBAAM,IAAI,CAAC,iBAAiB,EAAE,EAAA;;wBAA9B,SAA8B,CAAC;;;;;;;wBAI3B,qBAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA;;wBAAhC,SAAgC,CAAC;;;;;6BAErC,MAAM,OAAK,CAAC;;;;;KAGnB;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5D,qCAAS,GAAzB,UAA0B,SAAmB;;;;;4BACxB,qBAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,EAAA;;wBAAlE,QAAQ,GAAG,SAAuD;wBACxE,IAAI,CAAC,QAAQ;4BACT,sBAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAC;wBAEzB,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,GAAG,GAAG,IAAI,GAAG,GAAG,EAAhB,CAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvE,KAAK,GAAG,2BAAsB,IAAI,CAAC,2BAA2B,EAAE,mHAA6F,CAAC;wBAClK,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;4BAC1B,KAAK,IAAI,6BAAuB,eAAe,MAAG,CAAC;wBACvC,qBAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAA;;wBAAjC,OAAO,GAAG,SAAuB;wBACvC,sBAAO,OAAO,CAAC,GAAG,CAAC,UAAC,MAAW;gCAC3B,IAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gCACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gCAC3B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gCAClC,OAAO,IAAI,CAAC;4BAChB,CAAC,CAAC,EAAC;;;;KACN;IAED;;OAEG;IACa,sCAAU,GAA1B,UAA2B,UAAoB;;;;;;;wBAE3C,6CAA6C;wBAC7C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;4BACjC,sBAAO,EAAE,EAAC;wBAGR,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,GAAG,GAAG,IAAI,GAAG,GAAG,EAAhB,CAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvE,SAAS,GAAG,4DAAsD,gBAAgB,MAAG,CAAC;wBACtF,UAAU,GAAG,8DAAwD,gBAAgB,MAAG,CAAC;wBAEzF,UAAU,GAAG,iFAAqE;4BACpF,6GAAmG;4BACnG,gCAA4B;4BAC5B,6FAAiF;4BACjF,iGAAqF;6BACrF,sCAAgC,gBAAgB,+CAAwC,CAAA;4BACxF,iFAAqE,CAAC;wBAEpE,cAAc,GAAG,4IAA0H;4BAC7I,oGAAwF;4BACxF,kCAA8B;4BAC9B,8IAA0H;4BAC1H,kNAAsL;6BACtL,oCAA8B,gBAAgB,0CAAmC,CAAA,CAAC;wBAEhF,cAAc,GAAG,yIAAqH;4BACxI,kCAA8B;4BAC9B,8IAA0H;6BAC1H,oCAA8B,gBAAgB,6FAAkF,CAAA,CAAC;wBAE3C,qBAAM,OAAO,CAAC,GAAG,CAAC;gCACxG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gCACrB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gCACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gCACtB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;gCAC1B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;6BAC7B,CAAC,EAAA;;wBANI,KAAA,8BAAoF,SAMxF,KAAA,EANK,QAAQ,QAAA,EAAE,SAAS,QAAA,EAAE,SAAS,QAAA,EAAE,aAAa,QAAA,EAAE,aAAa,QAAA;wBAQnE,yDAAyD;wBACzD,IAAI,CAAC,QAAQ,CAAC,MAAM;4BAChB,sBAAO,EAAE,EAAC;wBAEd,kCAAkC;wBAClC,sBAAO,QAAQ,CAAC,GAAG,CAAC,UAAA,OAAO;gCACvB,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;gCAC1B,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;gCAEnC,yCAAyC;gCACzC,KAAK,CAAC,OAAO,GAAG,SAAS;qCACpB,MAAM,CAAC,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,EAArC,CAAqC,CAAC;qCACzD,GAAG,CAAC,UAAA,QAAQ;oCACT,IAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,aAAa,CAAC,EAApG,CAAoG,CAAC,CAAC;oCAErK,IAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAA,UAAU,IAAI,OAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,GAAG,EAArC,CAAqC,CAAC,CAAC;oCACrG,IAAM,qBAAqB,GAAG,gBAAgB;wCAC1C,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,iBAAiB,CAAC,KAAK,GAAG;+CACvE,YAAY,CAAC,iBAAiB,CAAC,KAAK,gBAAgB,CAAC,iBAAiB,CAAC;+CACvE,YAAY,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,aAAa,CAAC,EAFvB,CAEuB,CAAC;wCAC/D,CAAC,CAAC,KAAK,CAAC;oCACZ,IAAM,QAAQ,GAAG,CAAC,CAAC,gBAAgB,IAAI,CAAC,qBAAqB,CAAC;oCAE9D,IAAM,SAAS,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAA,UAAU,IAAK,OAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,GAAG,EAArC,CAAqC,CAAC,CAAC;oCAEjG,IAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;oCACtC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;oCAC3C,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;oCACvD,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wCACpC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oCAElE,+CAA+C;oCAC/C,IAAI,KAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,IAAkB,CAAC,KAAK,CAAC,CAAC,EAAE;wCAClF,IAAM,QAAM,GAAG,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;wCACvG,WAAW,CAAC,MAAM,GAAG,QAAM,IAAI,CAAC,KAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAM,CAAC,CAAC,CAAC,CAAC,QAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qCACnH;oCAED,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE;wCAC/D,IAAI,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,KAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;4CACrH,WAAW,CAAC,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;wCACvD,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,KAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;4CACzG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;qCAElD;yCAAM,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW;2CACrC,WAAW,CAAC,IAAI,KAAK,0BAA0B;2CAC/C,WAAW,CAAC,IAAI,KAAK,gCAAgC,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;wCAC9F,WAAW,CAAC,SAAS,GAAG,CAAC,KAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;qCAC3I;oCAED,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI;2CAChD,QAAQ,CAAC,cAAc,CAAC,KAAK,SAAS;2CACtC,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oCAEtH,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;oCACtD,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;oCAChC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;oCAClC,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,KAAK,CAAC;oCAChE,IAAI,WAAW,CAAC,WAAW,EAAE;wCACzB,WAAW,CAAC,kBAAkB,GAAG,WAAW,CAAC;wCAC7C,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;qCACnC;oCACD,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,OAAO;oCACjC,OAAO,WAAW,CAAC;gCACvB,CAAC,CAAC,CAAC;gCAEP,yFAAyF;gCACzF,IAAM,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAA,YAAY;oCAC1E,OAAO,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC;gCAChG,CAAC,CAAC,EAAE,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,iBAAiB,CAAC,EAA/B,CAA+B,CAAC,CAAC;gCAErD,KAAK,CAAC,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAA,UAAU;oCACjD,IAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,iBAAiB,CAAC,KAAK,UAAU,CAAC,iBAAiB,CAAC,EAAxD,CAAwD,CAAC,CAAC;oCACtG,OAAO,IAAI,WAAW,CAAC;wCACnB,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC;wCACnC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,aAAa,CAAC,EAAhB,CAAgB,CAAC;qCAClD,CAAC,CAAC;gCACP,CAAC,CAAC,CAAC;gCAEH,uFAAuF;gCACvF,IAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAA,YAAY;oCACzE,OAAO,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC;gCAChG,CAAC,CAAC,EAAE,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,iBAAiB,CAAC,EAA/B,CAA+B,CAAC,CAAC;gCAErD,KAAK,CAAC,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,UAAA,UAAU;oCAC/C,IAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,iBAAiB,CAAC,KAAK,UAAU,CAAC,iBAAiB,CAAC,EAAxD,CAAwD,CAAC,CAAC;oCACrG,OAAO,IAAI,UAAU,CAAC;wCAClB,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC;wCACnC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,aAAa,CAAC,EAAhB,CAAgB,CAAC;wCAC9C,UAAU,EAAE,UAAU,CAAC,kBAAkB,CAAC;qCAC7C,CAAC,CAAC;gCACP,CAAC,CAAC,CAAC;gCAEH,kGAAkG;gCAClG,IAAM,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAA,YAAY;oCAC9E,OAAO,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;gCACrD,CAAC,CAAC,EAAE,UAAA,YAAY,IAAI,OAAA,YAAY,CAAC,iBAAiB,CAAC,EAA/B,CAA+B,CAAC,CAAC;gCAErD,KAAK,CAAC,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,UAAA,YAAY;oCAC3D,IAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,YAAY,CAAC,iBAAiB,CAAC,EAA3D,CAA2D,CAAC,CAAC;oCAC9G,OAAO,IAAI,eAAe,CAAC;wCACvB,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC;wCACrC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,aAAa,CAAC,EAAnB,CAAmB,CAAC;wCACzD,mBAAmB,EAAE,YAAY,CAAC,uBAAuB,CAAC;wCAC1D,qBAAqB,EAAE,WAAW,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,wBAAwB,CAAC,EAA9B,CAA8B,CAAC;wCAC9E,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC;wCACnC,QAAQ,EAAE,WAAW;qCACxB,CAAC,CAAC;gCACP,CAAC,CAAC,CAAC;gCAEH,oDAAoD;gCACpD,KAAK,CAAC,OAAO,GAAG,SAAS;qCACpB,MAAM,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,EAApC,CAAoC,CAAC;qCACvD,GAAG,CAAC,UAAA,OAAO;oCACR,OAAO,IAAI,UAAU,CAAC;wCAClB,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;wCAC3B,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;wCAC/C,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,QAAQ;qCAC/C,CAAC,CAAC;gCACP,CAAC,CAAC,CAAC;gCAEP,OAAO,KAAK,CAAC;4BACjB,CAAC,CAAC,EAAC;;;;KACN;IAED;;OAEG;IACO,0CAAc,GAAxB,UAAyB,KAAY,EAAE,iBAA2B;QAAlE,iBA4DC;QA3DG,IAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAjC,CAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpG,IAAI,GAAG,GAAG,oBAAiB,KAAK,CAAC,IAAI,YAAM,iBAAmB,CAAC;QAE/D,KAAK,CAAC,OAAO;aACR,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,QAAQ,EAAf,CAAe,CAAC;aACjC,OAAO,CAAC,UAAA,MAAM;YACX,IAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAxE,CAAwE,CAAC,CAAC;YAC7H,IAAI,CAAC,aAAa;gBACd,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;oBAC/B,IAAI,EAAE,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpF,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;iBAC7B,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QAEP,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM;gBACvC,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBACnI,IAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,OAAI,UAAU,OAAG,EAAjB,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvF,OAAO,kBAAe,UAAU,mBAAa,WAAW,MAAG,CAAC;YAChE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,GAAG,IAAI,OAAK,UAAY,CAAC;SAC5B;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK;gBACpC,IAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,UAAW,CAAC,CAAC;gBAC9H,OAAO,kBAAe,SAAS,kBAAY,KAAK,CAAC,UAAU,MAAG,CAAC;YACnE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,GAAG,IAAI,OAAK,SAAW,CAAC;SAC3B;QAED,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,EAAE;YACnD,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,EAAE;gBAC3C,IAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,OAAI,UAAU,OAAG,EAAjB,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnF,IAAI,CAAC,EAAE,CAAC,IAAI;oBACR,EAAE,CAAC,IAAI,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;gBACxF,IAAM,qBAAqB,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,OAAI,UAAU,OAAG,EAAjB,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvG,IAAI,UAAU,GAAG,kBAAe,EAAE,CAAC,IAAI,wBAAkB,WAAW,uBAAiB,EAAE,CAAC,mBAAmB,YAAM,qBAAqB,MAAG,CAAC;gBAC1I,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,KAAK,WAAW,EAAE,uFAAuF;oBACnI,UAAU,IAAI,gBAAc,EAAE,CAAC,QAAU,CAAC;gBAE9C,OAAO,UAAU,CAAC;YACtB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,GAAG,IAAI,OAAK,cAAgB,CAAC;SAChC;QAED,IAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,SAAS,EAAhB,CAAgB,CAAC,CAAC;QACxE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,CAAC;YAC5H,IAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,OAAI,MAAM,CAAC,IAAI,OAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,GAAG,IAAI,oBAAiB,cAAc,wBAAkB,WAAW,MAAG,CAAC;SAC1E;QAED,GAAG,IAAI,GAAG,CAAC;QAEX,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACO,wCAAY,GAAtB,UAAuB,WAAyB,EAAE,OAAiB;QAC/D,IAAM,SAAS,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QAChF,IAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,4BAAyB,SAAS,OAAG,CAAC,CAAC,CAAC,kBAAe,SAAS,OAAG,CAAC;QAC5F,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAES,yCAAa,GAAvB,UAAwB,IAAU;QAC9B,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;YACrC,OAAO,IAAI,KAAK,CAAC,mBAAgB,IAAI,CAAC,IAAI,cAAQ,IAAI,CAAC,UAAY,CAAC,CAAC;SACxE;aAAM;YACH,OAAO,IAAI,KAAK,CAAC,mBAAgB,IAAI,CAAC,IAAI,cAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAI,CAAC,CAAC;SACpG;IACL,CAAC;IAES,mDAAuB,GAAjC,UAAkC,IAAU;QACxC,IAAM,UAAU,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxH,IAAA;;;;wCAIsB,EAJrB,aAAK,EAAE,kBAIc,CAAC;QAE7B,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACO,uCAAW,GAArB,UAAsB,UAAuB;QACzC,IAAM,QAAQ,GAAG,UAAU,YAAY,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3E,OAAO,IAAI,KAAK,CAAC,iBAAc,QAAQ,OAAG,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACO,mDAAuB,GAAjC,UAAkC,UAAuB;QACrD,IAAM,QAAQ,GAAG,UAAU,YAAY,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3E,IAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAC1C,IAAA;;;;wCAIsB,EAJrB,aAAK,EAAE,kBAIc,CAAC;QAE7B,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACO,0CAAc,GAAxB,UAAyB,KAAY,EAAE,KAAiB;QACpD,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,OAAI,UAAU,OAAG,EAAjB,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,IAAI,KAAK,CAAC,aAAU,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAU,KAAK,CAAC,IAAI,gBAAS,KAAK,CAAC,IAAI,YAAM,OAAO,MAAG,CAAC,CAAC;IACvH,CAAC;IAED;;OAEG;IACO,wCAAY,GAAtB,UAAuB,WAA8B;QACjD,IAAI,SAAS,GAAG,WAAW,YAAY,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QACnF,OAAO,IAAI,KAAK,CAAC,kBAAe,SAAS,OAAG,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACO,+CAAmB,GAA7B,UAA8B,KAAY,EAAE,WAAqB;QAC7D,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9F,IAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,OAAI,UAAU,OAAG,EAAjB,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,cAAc,wBAAkB,iBAAiB,MAAG,CAAC,CAAC;IAC1H,CAAC;IAED;;OAEG;IACO,6CAAiB,GAA3B,UAA4B,KAAY;QACpC,IAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC;QACpE,IAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9F,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,cAAc,OAAG,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACO,qDAAyB,GAAnC,UAAoC,KAAY,EAAE,gBAA6B;QAC3E,IAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,IAAG,GAAG,MAAM,GAAG,IAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9F,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,gBAAgB,CAAC,IAAI,mBAAa,WAAW,MAAG,CAAC,CAAC;IACtH,CAAC;IAED;;OAEG;IACO,mDAAuB,GAAjC,UAAkC,KAAY,EAAE,YAAgC;QAC5E,IAAM,UAAU,GAAG,YAAY,YAAY,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1F,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,UAAU,OAAG,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACO,oDAAwB,GAAlC,UAAmC,KAAY,EAAE,eAA2B;QACxE,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,eAAe,CAAC,IAAI,kBAAY,eAAe,CAAC,UAAU,MAAG,CAAC,CAAC;IACnI,CAAC;IAED;;OAEG;IACO,kDAAsB,GAAhC,UAAiC,KAAY,EAAE,WAA8B;QACzE,IAAM,SAAS,GAAG,WAAW,YAAY,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QACrF,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,SAAS,OAAG,CAAC,CAAC;IACnF,CAAC;IAED;;OAEG;IACO,+CAAmB,GAA7B,UAA8B,KAAY,EAAE,UAA2B;QACnE,IAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,IAAG,GAAG,MAAM,GAAG,IAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxF,IAAM,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,IAAG,GAAG,MAAM,GAAG,IAAG,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3G,IAAI,GAAG,GAAG,mBAAgB,KAAK,CAAC,IAAI,4BAAqB,UAAU,CAAC,IAAI,wBAAkB,WAAW,OAAI;aACrG,kBAAe,UAAU,CAAC,mBAAmB,YAAM,qBAAqB,MAAG,CAAA,CAAC;QAChF,uFAAuF;QACvF,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,KAAK,WAAW;YAC1D,GAAG,IAAI,gBAAc,UAAU,CAAC,QAAU,CAAC;QAE/C,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACO,6CAAiB,GAA3B,UAA4B,KAAY,EAAE,gBAAwC;QAC9E,IAAM,cAAc,GAAG,gBAAgB,YAAY,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC9G,OAAO,IAAI,KAAK,CAAC,mBAAgB,KAAK,CAAC,IAAI,6BAAsB,cAAc,OAAG,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACO,gDAAoB,GAA9B,UAA+B,MAAmB;QAC9C,IAAI,CAAC,GAAG,OAAI,MAAM,CAAC,IAAI,QAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,OAAO;YACd,CAAC,IAAI,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC;QAC5C,IAAI,MAAM,CAAC,SAAS;YAChB,CAAC,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;QACxC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,yCAAyC;YAClG,CAAC,IAAI,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;QACtC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,2CAA2C;YAC9F,CAAC,IAAI,WAAW,CAAC;QACrB,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,kBAAkB,KAAK,WAAW;YACxE,CAAC,IAAI,+BAA+B,CAAC;QAEzC,OAAO,CAAC,CAAC;IACb,CAAC;IAGL,wBAAC;AAAD,CAt+CA,AAs+CC,CAt+CsC,eAAe,GAs+CrD","file":"OracleQueryRunner.js","sourcesContent":["import {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {TransactionAlreadyStartedError} from \"../../error/TransactionAlreadyStartedError\";\nimport {TransactionNotStartedError} from \"../../error/TransactionNotStartedError\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {Table} from \"../../schema-builder/table/Table\";\nimport {TableForeignKey} from \"../../schema-builder/table/TableForeignKey\";\nimport {TableIndex} from \"../../schema-builder/table/TableIndex\";\nimport {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {View} from \"../../schema-builder/view/View\";\nimport {Query} from \"../Query\";\nimport {OracleDriver} from \"./OracleDriver\";\nimport {ReadStream} from \"../../platform/PlatformTools\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {TableUnique} from \"../../schema-builder/table/TableUnique\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport {BaseQueryRunner} from \"../../query-runner/BaseQueryRunner\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {TableCheck} from \"../../schema-builder/table/TableCheck\";\nimport {ColumnType, PromiseUtils} from \"../../index\";\nimport {IsolationLevel} from \"../types/IsolationLevel\";\nimport {TableExclusion} from \"../../schema-builder/table/TableExclusion\";\n\n/**\n * Runs queries on a single oracle database connection.\n */\nexport class OracleQueryRunner extends BaseQueryRunner implements QueryRunner {\n\n    // -------------------------------------------------------------------------\n    // Public Implemented Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Database driver used by connection.\n     */\n    driver: OracleDriver;\n\n    // -------------------------------------------------------------------------\n    // Protected Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Promise used to obtain a database connection for a first time.\n     */\n    protected databaseConnectionPromise: Promise<any>;\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(driver: OracleDriver, mode: \"master\"|\"slave\" = \"master\") {\n        super();\n        this.driver = driver;\n        this.connection = driver.connection;\n        this.broadcaster = new Broadcaster(this);\n        this.mode = mode;\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Creates/uses database connection from the connection pool to perform further operations.\n     * Returns obtained database connection.\n     */\n    connect(): Promise<any> {\n        if (this.databaseConnection)\n            return Promise.resolve(this.databaseConnection);\n\n        if (this.databaseConnectionPromise)\n            return this.databaseConnectionPromise;\n\n        if (this.mode === \"slave\" && this.driver.isReplicated) {\n            this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(connection => {\n                this.databaseConnection = connection;\n                return this.databaseConnection;\n            });\n\n        } else { // master\n            this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(connection => {\n                this.databaseConnection = connection;\n                return this.databaseConnection;\n            });\n        }\n\n        return this.databaseConnectionPromise;\n    }\n\n    /**\n     * Releases used database connection.\n     * You cannot use query runner methods once its released.\n     */\n    release(): Promise<void> {\n        return new Promise<void>((ok, fail) => {\n            this.isReleased = true;\n            if (this.databaseConnection) {\n                this.databaseConnection.close((err: any) => {\n                    if (err)\n                        return fail(err);\n\n                    ok();\n                });\n            } else {\n                ok();\n            }\n        });\n    }\n\n    /**\n     * Starts transaction.\n     */\n    async startTransaction(isolationLevel: IsolationLevel = \"READ COMMITTED\"): Promise<void> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        if (this.isTransactionActive)\n            throw new TransactionAlreadyStartedError();\n\n        // await this.query(\"START TRANSACTION\");\n        if (isolationLevel !== \"SERIALIZABLE\" && isolationLevel !== \"READ COMMITTED\") {\n            throw new Error(`Oracle only supports SERIALIZABLE and READ COMMITTED isolation`);\n        }\n        await this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel);\n        this.isTransactionActive = true;\n    }\n\n    /**\n     * Commits transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async commitTransaction(): Promise<void> {\n        if (!this.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        await this.query(\"COMMIT\");\n        this.isTransactionActive = false;\n    }\n\n    /**\n     * Rollbacks transaction.\n     * Error will be thrown if transaction was not started.\n     */\n    async rollbackTransaction(): Promise<void> {\n        if (!this.isTransactionActive)\n            throw new TransactionNotStartedError();\n\n        await this.query(\"ROLLBACK\");\n        this.isTransactionActive = false;\n    }\n\n    /**\n     * Executes a given SQL query.\n     */\n    query(query: string, parameters?: any[]): Promise<any> {\n        if (this.isReleased)\n            throw new QueryRunnerAlreadyReleasedError();\n\n        return new Promise(async (ok, fail) => {\n            try {\n                this.driver.connection.logger.logQuery(query, parameters, this);\n                const queryStartTime = +new Date();\n\n                const handler = (err: any, result: any) => {\n\n                    // log slow queries if maxQueryExecution time is set\n                    const maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n                    const queryEndTime = +new Date();\n                    const queryExecutionTime = queryEndTime - queryStartTime;\n                    if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n                        this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n                    if (err) {\n                        this.driver.connection.logger.logQueryError(err, query, parameters, this);\n                        return fail(new QueryFailedError(query, parameters, err));\n                    }\n                    // TODO: find better solution. Must return result instead of properties\n                    ok(result.rows || result.outBinds || result.rowsAffected);\n                };\n                const executionOptions = {\n                    autoCommit: this.isTransactionActive ? false : true\n                };\n\n                const databaseConnection = await this.connect();\n                databaseConnection.execute(query, parameters || {}, executionOptions, handler);\n\n            } catch (err) {\n                fail(err);\n            }\n        });\n    }\n\n    /**\n     * Returns raw data stream.\n     */\n    stream(query: string, parameters?: any[], onEnd?: Function, onError?: Function): Promise<ReadStream> {\n        throw new Error(`Stream is not supported by Oracle driver.`);\n    }\n\n    /**\n     * Returns all available database names including system databases.\n     */\n    async getDatabases(): Promise<string[]> {\n        return Promise.resolve([]);\n    }\n\n    /**\n     * Returns all available schema names including system schemas.\n     * If database parameter specified, returns schemas of that database.\n     */\n    async getSchemas(database?: string): Promise<string[]> {\n        return Promise.resolve([]);\n    }\n\n    /**\n     * Checks if database with the given name exist.\n     */\n    async hasDatabase(database: string): Promise<boolean> {\n        return Promise.resolve(false);\n    }\n\n    /**\n     * Checks if schema with the given name exist.\n     */\n    async hasSchema(schema: string): Promise<boolean> {\n        return Promise.resolve(false);\n    }\n\n    /**\n     * Checks if table with the given name exist in the database.\n     */\n    async hasTable(tableOrName: Table|string): Promise<boolean> {\n        const tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n        const sql = `SELECT \"TABLE_NAME\" FROM \"USER_TABLES\" WHERE \"TABLE_NAME\" = '${tableName}'`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Checks if column with the given name exist in the given table.\n     */\n    async hasColumn(tableOrName: Table|string, columnName: string): Promise<boolean> {\n        const tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n        const sql = `SELECT \"COLUMN_NAME\" FROM \"USER_TAB_COLS\" WHERE \"TABLE_NAME\" = '${tableName}' AND \"COLUMN_NAME\" = '${columnName}'`;\n        const result = await this.query(sql);\n        return result.length ? true : false;\n    }\n\n    /**\n     * Creates a new database.\n     */\n    async createDatabase(database: string, ifNotExist?: boolean): Promise<void> {\n        await this.query(`CREATE DATABASE IF NOT EXISTS \"${database}\"`);\n    }\n\n    /**\n     * Drops database.\n     */\n    async dropDatabase(database: string, ifExist?: boolean): Promise<void> {\n        return Promise.resolve();\n    }\n\n    /**\n     * Creates a new table schema.\n     */\n    async createSchema(schemas: string, ifNotExist?: boolean): Promise<void> {\n        throw new Error(`Schema create queries are not supported by Oracle driver.`);\n    }\n\n    /**\n     * Drops table schema.\n     */\n    async dropSchema(schemaPath: string, ifExist?: boolean): Promise<void> {\n        throw new Error(`Schema drop queries are not supported by Oracle driver.`);\n    }\n\n    /**\n     * Creates a new table.\n     */\n    async createTable(table: Table, ifNotExist: boolean = false, createForeignKeys: boolean = true, createIndices: boolean = true): Promise<void> {\n        if (ifNotExist) {\n            const isTableExist = await this.hasTable(table);\n            if (isTableExist) return Promise.resolve();\n        }\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        upQueries.push(this.createTableSql(table, createForeignKeys));\n        downQueries.push(this.dropTableSql(table));\n\n        // if createForeignKeys is true, we must drop created foreign keys in down query.\n        // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n        if (createForeignKeys)\n            table.foreignKeys.forEach(foreignKey => downQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        if (createIndices) {\n            table.indices.forEach(index => {\n                // new index may be passed without name. In this case we generate index name manually.\n                if (!index.name)\n                    index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n                upQueries.push(this.createIndexSql(table, index));\n                downQueries.push(this.dropIndexSql(index));\n            });\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops the table.\n     */\n    async dropTable(tableOrName: Table|string, ifExist?: boolean, dropForeignKeys: boolean = true, dropIndices: boolean = true): Promise<void> {// It needs because if table does not exist and dropForeignKeys or dropIndices is true, we don't need\n        // to perform drop queries for foreign keys and indices.\n        if (ifExist) {\n            const isTableExist = await this.hasTable(tableOrName);\n            if (!isTableExist) return Promise.resolve();\n        }\n\n        // if dropTable called with dropForeignKeys = true, we must create foreign keys in down query.\n        const createForeignKeys: boolean = dropForeignKeys;\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n\n        if (dropIndices) {\n            table.indices.forEach(index => {\n                upQueries.push(this.dropIndexSql(index));\n                downQueries.push(this.createIndexSql(table, index));\n            });\n        }\n\n        // if dropForeignKeys is true, we just drop the table, otherwise we also drop table foreign keys.\n        // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n        if (dropForeignKeys)\n            table.foreignKeys.forEach(foreignKey => upQueries.push(this.dropForeignKeySql(table, foreignKey)));\n\n        upQueries.push(this.dropTableSql(table));\n        downQueries.push(this.createTableSql(table, createForeignKeys));\n\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Creates a new view.\n     */\n    async createView(view: View): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        upQueries.push(this.createViewSql(view));\n        upQueries.push(this.insertViewDefinitionSql(view));\n        downQueries.push(this.dropViewSql(view));\n        downQueries.push(this.deleteViewDefinitionSql(view));\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Drops the view.\n     */\n    async dropView(target: View|string): Promise<void> {\n        const viewName = target instanceof View ? target.name : target;\n        const view = await this.getCachedView(viewName);\n\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        upQueries.push(this.deleteViewDefinitionSql(view));\n        upQueries.push(this.dropViewSql(view));\n        downQueries.push(this.insertViewDefinitionSql(view));\n        downQueries.push(this.createViewSql(view));\n        await this.executeQueries(upQueries, downQueries);\n    }\n\n    /**\n     * Renames the given table.\n     */\n    async renameTable(oldTableOrName: Table|string, newTableOrName: Table|string): Promise<void> {\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n        const oldTable = oldTableOrName instanceof Table ? oldTableOrName : await this.getCachedTable(oldTableOrName);\n        let newTable = oldTable.clone();\n\n        if (newTableOrName instanceof Table) {\n            newTable = newTableOrName;\n        } else {\n            newTable.name = newTableOrName;\n        }\n\n        // rename table\n        upQueries.push(new Query(`ALTER TABLE \"${oldTable.name}\" RENAME TO \"${newTable.name}\"`));\n        downQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME TO \"${oldTable.name}\"`));\n\n        // rename primary key constraint\n        if (newTable.primaryColumns.length > 0) {\n            const columnNames = newTable.primaryColumns.map(column => column.name);\n\n            const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n            const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n\n            // build queries\n            upQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME CONSTRAINT \"${oldPkName}\" TO \"${newPkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME CONSTRAINT \"${newPkName}\" TO \"${oldPkName}\"`));\n        }\n\n        // rename unique constraints\n        newTable.uniques.forEach(unique => {\n            // build new constraint name\n            const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n\n            // build queries\n            upQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME CONSTRAINT \"${unique.name}\" TO \"${newUniqueName}\"`));\n            downQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME CONSTRAINT \"${newUniqueName}\" TO \"${unique.name}\"`));\n\n            // replace constraint name\n            unique.name = newUniqueName;\n        });\n\n        // rename index constraints\n        newTable.indices.forEach(index => {\n            // build new constraint name\n            const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n\n            // build queries\n            upQueries.push(new Query(`ALTER INDEX \"${index.name}\" RENAME TO \"${newIndexName}\"`));\n            downQueries.push(new Query(`ALTER INDEX \"${newIndexName}\" RENAME TO \"${index.name}\"`));\n\n            // replace constraint name\n            index.name = newIndexName;\n        });\n\n        // rename foreign key constraints\n        newTable.foreignKeys.forEach(foreignKey => {\n            // build new constraint name\n            const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames);\n\n            // build queries\n            upQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME CONSTRAINT \"${foreignKey.name}\" TO \"${newForeignKeyName}\"`));\n            downQueries.push(new Query(`ALTER TABLE \"${newTable.name}\" RENAME CONSTRAINT \"${newForeignKeyName}\" TO \"${foreignKey.name}\"`));\n\n            // replace constraint name\n            foreignKey.name = newForeignKeyName;\n        });\n\n        await this.executeQueries(upQueries, downQueries);\n\n        // rename old table and replace it in cached tabled;\n        oldTable.name = newTable.name;\n        this.replaceCachedTable(oldTable, newTable);\n    }\n\n    /**\n     * Creates a new column from the column in the table.\n     */\n    async addColumn(tableOrName: Table|string, column: TableColumn): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD ${this.buildCreateColumnSql(column)}`));\n        downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP COLUMN \"${column.name}\"`));\n\n        // create or update primary key constraint\n        if (column.isPrimary) {\n            const primaryColumns = clonedTable.primaryColumns;\n            // if table already have primary key, me must drop it and recreate again\n            if (primaryColumns.length > 0) {\n                const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n                downQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n            }\n\n            primaryColumns.push(column);\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n            const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n            downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n        }\n\n        // create column index\n        const columnIndex = clonedTable.indices.find(index => index.columnNames.length === 1 && index.columnNames[0] === column.name);\n        if (columnIndex) {\n            clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n            upQueries.push(this.createIndexSql(table, columnIndex));\n            downQueries.push(this.dropIndexSql(columnIndex));\n        }\n\n        // create unique constraint\n        if (column.isUnique) {\n            const uniqueConstraint = new TableUnique({\n                name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n                columnNames: [column.name]\n            });\n            clonedTable.uniques.push(uniqueConstraint);\n            upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (\"${column.name}\")`));\n            downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${uniqueConstraint.name}\"`));\n        }\n\n        await this.executeQueries(upQueries, downQueries);\n\n        clonedTable.addColumn(column);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Creates a new columns from the column in the table.\n     */\n    async addColumns(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        await PromiseUtils.runInSequence(columns, column => this.addColumn(tableOrName, column));\n    }\n\n    /**\n     * Renames column in the given table.\n     */\n    async renameColumn(tableOrName: Table|string, oldTableColumnOrName: TableColumn|string, newTableColumnOrName: TableColumn|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(c => c.name === oldTableColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        let newColumn: TableColumn|undefined = undefined;\n        if (newTableColumnOrName instanceof TableColumn) {\n            newColumn = newTableColumnOrName;\n        } else {\n            newColumn = oldColumn.clone();\n            newColumn.name = newTableColumnOrName;\n        }\n\n        await this.changeColumn(table, oldColumn, newColumn);\n    }\n\n    /**\n     * Changes a column in the table.\n     */\n    async changeColumn(tableOrName: Table|string, oldTableColumnOrName: TableColumn|string, newColumn: TableColumn): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        let clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        const oldColumn = oldTableColumnOrName instanceof TableColumn\n            ? oldTableColumnOrName\n            : table.columns.find(column => column.name === oldTableColumnOrName);\n        if (!oldColumn)\n            throw new Error(`Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`);\n\n        if ((newColumn.isGenerated !== oldColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") || oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length) {\n            // Oracle does not support changing of IDENTITY column, so we must drop column and recreate it again.\n            // Also, we recreate column if column type changed\n            await this.dropColumn(table, oldColumn);\n            await this.addColumn(table, newColumn);\n\n            // update cloned table\n            clonedTable = table.clone();\n\n        } else {\n            if (newColumn.name !== oldColumn.name) {\n                // rename column\n                upQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME COLUMN \"${oldColumn.name}\" TO \"${newColumn.name}\"`));\n                downQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME COLUMN \"${newColumn.name}\" TO \"${oldColumn.name}\"`));\n\n                // rename column primary key constraint\n                if (oldColumn.isPrimary === true) {\n                    const primaryColumns = clonedTable.primaryColumns;\n\n                    // build old primary constraint name\n                    const columnNames = primaryColumns.map(column => column.name);\n                    const oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n\n                    // replace old column name with new column name\n                    columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n                    columnNames.push(newColumn.name);\n\n                    // build new primary constraint name\n                    const newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME CONSTRAINT \"${oldPkName}\" TO \"${newPkName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME CONSTRAINT \"${newPkName}\" TO \"${oldPkName}\"`));\n                }\n\n                // rename unique constraints\n                clonedTable.findColumnUniques(oldColumn).forEach(unique => {\n                    // build new constraint name\n                    unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n                    unique.columnNames.push(newColumn.name);\n                    const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n\n                    // build queries\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME CONSTRAINT \"${unique.name}\" TO \"${newUniqueName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME CONSTRAINT \"${newUniqueName}\" TO \"${unique.name}\"`));\n\n                    // replace constraint name\n                    unique.name = newUniqueName;\n                });\n\n                // rename index constraints\n                clonedTable.findColumnIndices(oldColumn).forEach(index => {\n                    // build new constraint name\n                    index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n                    index.columnNames.push(newColumn.name);\n                    const newIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n\n                    // build queries\n                    upQueries.push(new Query(`ALTER INDEX \"${index.name}\" RENAME TO \"${newIndexName}\"`));\n                    downQueries.push(new Query(`ALTER INDEX \"${newIndexName}\" RENAME TO \"${index.name}\"`));\n\n                    // replace constraint name\n                    index.name = newIndexName;\n                });\n\n                // rename foreign key constraints\n                clonedTable.findColumnForeignKeys(oldColumn).forEach(foreignKey => {\n                    // build new constraint name\n                    foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n                    foreignKey.columnNames.push(newColumn.name);\n                    const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames);\n\n                    // build queries\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME CONSTRAINT \"${foreignKey.name}\" TO \"${newForeignKeyName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" RENAME CONSTRAINT \"${newForeignKeyName}\" TO \"${foreignKey.name}\"`));\n\n                    // replace constraint name\n                    foreignKey.name = newForeignKeyName;\n                });\n\n                // rename old column in the Table object\n                const oldTableColumn = clonedTable.columns.find(column => column.name === oldColumn.name);\n                clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn!)].name = newColumn.name;\n                oldColumn.name = newColumn.name;\n            }\n\n            if (this.isColumnChanged(oldColumn, newColumn, true)) {\n                let defaultUp: string = \"\";\n                let defaultDown: string = \"\";\n                let nullableUp:  string = \"\";\n                let nullableDown:  string = \"\";\n\n                // changing column default\n                if (newColumn.default !== null && newColumn.default !== undefined) {\n                    defaultUp = `DEFAULT ${newColumn.default}`;\n\n                    if (oldColumn.default !== null && oldColumn.default !== undefined) {\n                        defaultDown = `DEFAULT ${oldColumn.default}`;\n                    } else {\n                        defaultDown = \"DEFAULT NULL\";\n                    }\n\n                } else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n                    defaultUp = \"DEFAULT NULL\";\n                    defaultDown = `DEFAULT ${oldColumn.default}`;\n                }\n\n                // changing column isNullable property\n                if (newColumn.isNullable !== oldColumn.isNullable) {\n                    if (newColumn.isNullable === true) {\n                        nullableUp = \"NULL\";\n                        nullableDown = \"NOT NULL\";\n                    } else {\n                        nullableUp = \"NOT NULL\";\n                        nullableDown = \"NULL\";\n                    }\n                }\n\n                upQueries.push(new Query(`ALTER TABLE \"${table.name}\" MODIFY \"${oldColumn.name}\" ${this.connection.driver.createFullType(newColumn)} ${defaultUp} ${nullableUp}`));\n                downQueries.push(new Query(`ALTER TABLE \"${table.name}\" MODIFY \"${oldColumn.name}\" ${this.connection.driver.createFullType(oldColumn)} ${defaultDown} ${nullableDown}`));\n            }\n\n            if (newColumn.isPrimary !== oldColumn.isPrimary) {\n                const primaryColumns = clonedTable.primaryColumns;\n\n                // if primary column state changed, we must always drop existed constraint.\n                if (primaryColumns.length > 0) {\n                    const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                    const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                }\n\n                if (newColumn.isPrimary === true) {\n                    primaryColumns.push(newColumn);\n                    // update column in table\n                    const column = clonedTable.columns.find(column => column.name === newColumn.name);\n                    column!.isPrimary = true;\n                    const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                    const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n\n                } else {\n                    const primaryColumn = primaryColumns.find(c => c.name === newColumn.name);\n                    primaryColumns.splice(primaryColumns.indexOf(primaryColumn!), 1);\n\n                    // update column in table\n                    const column = clonedTable.columns.find(column => column.name === newColumn.name);\n                    column!.isPrimary = false;\n\n                    // if we have another primary keys, we must recreate constraint.\n                    if (primaryColumns.length > 0) {\n                        const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n                        const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n                        upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                        downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n                    }\n                }\n            }\n\n            if (newColumn.isUnique !== oldColumn.isUnique) {\n                if (newColumn.isUnique === true) {\n                    const uniqueConstraint = new TableUnique({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n                        columnNames: [newColumn.name]\n                    });\n                    clonedTable.uniques.push(uniqueConstraint);\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (\"${newColumn.name}\")`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${uniqueConstraint.name}\"`));\n\n                } else {\n                    const uniqueConstraint = clonedTable.uniques.find(unique => {\n                        return unique.columnNames.length === 1 && !!unique.columnNames.find(columnName => columnName === newColumn.name);\n                    });\n                    clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint!), 1);\n                    upQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${uniqueConstraint!.name}\"`));\n                    downQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${uniqueConstraint!.name}\" UNIQUE (\"${newColumn.name}\")`));\n                }\n            }\n\n            await this.executeQueries(upQueries, downQueries);\n            this.replaceCachedTable(table, clonedTable);\n        }\n    }\n\n    /**\n     * Changes a column in the table.\n     */\n    async changeColumns(tableOrName: Table|string, changedColumns: { newColumn: TableColumn, oldColumn: TableColumn }[]): Promise<void> {\n        await PromiseUtils.runInSequence(changedColumns, changedColumn => this.changeColumn(tableOrName, changedColumn.oldColumn, changedColumn.newColumn));\n    }\n\n    /**\n     * Drops column in the table.\n     */\n    async dropColumn(tableOrName: Table|string, columnOrName: TableColumn|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n        if (!column)\n            throw new Error(`Column \"${columnOrName}\" was not found in table \"${table.name}\"`);\n\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // drop primary key constraint\n        if (column.isPrimary) {\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(column => column.name));\n            const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\"${primaryColumn.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE \"${clonedTable.name}\" DROP CONSTRAINT \"${pkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE \"${clonedTable.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n\n            // update column in table\n            const tableColumn = clonedTable.findColumnByName(column.name);\n            tableColumn!.isPrimary = false;\n\n            // if primary key have multiple columns, we must recreate it without dropped column\n            if (clonedTable.primaryColumns.length > 0) {\n                const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(column => column.name));\n                const columnNames = clonedTable.primaryColumns.map(primaryColumn => `\"${primaryColumn.name}\"`).join(\", \");\n                upQueries.push(new Query(`ALTER TABLE \"${clonedTable.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNames})`));\n                downQueries.push(new Query(`ALTER TABLE \"${clonedTable.name}\" DROP CONSTRAINT \"${pkName}\"`));\n            }\n        }\n\n        // drop column index\n        const columnIndex = clonedTable.indices.find(index => index.columnNames.length === 1 && index.columnNames[0] === column.name);\n        if (columnIndex) {\n            upQueries.push(this.dropIndexSql(columnIndex));\n            downQueries.push(this.createIndexSql(table, columnIndex));\n        }\n\n        // drop column check\n        const columnCheck = clonedTable.checks.find(check => !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name);\n        if (columnCheck) {\n            clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n            upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n            downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n        }\n\n        // drop column unique\n        const columnUnique = clonedTable.uniques.find(unique => unique.columnNames.length === 1 && unique.columnNames[0] === column.name);\n        if (columnUnique) {\n            clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n            upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n            downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n        }\n\n        upQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP COLUMN \"${column.name}\"`));\n        downQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD ${this.buildCreateColumnSql(column)}`));\n\n        await this.executeQueries(upQueries, downQueries);\n\n        clonedTable.removeColumn(column);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Drops the columns in the table.\n     */\n    async dropColumns(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        await PromiseUtils.runInSequence(columns, column => this.dropColumn(tableOrName, column));\n    }\n\n    /**\n     * Creates a new primary key.\n     */\n    async createPrimaryKey(tableOrName: Table|string, columnNames: string[]): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const clonedTable = table.clone();\n\n        const up = this.createPrimaryKeySql(table, columnNames);\n\n        // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n        clonedTable.columns.forEach(column => {\n            if (columnNames.find(columnName => columnName === column.name))\n                column.isPrimary = true;\n        });\n        const down = this.dropPrimaryKeySql(clonedTable);\n\n        await this.executeQueries(up, down);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Updates composite primary keys.\n     */\n    async updatePrimaryKeys(tableOrName: Table|string, columns: TableColumn[]): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const columnNames = columns.map(column => column.name);\n        const clonedTable = table.clone();\n        const upQueries: Query[] = [];\n        const downQueries: Query[] = [];\n\n        // if table already have primary columns, we must drop them.\n        const primaryColumns = clonedTable.primaryColumns;\n        if (primaryColumns.length > 0) {\n            const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(column => column.name));\n            const columnNamesString = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            upQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n            downQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNamesString})`));\n        }\n\n        // update columns in table.\n        clonedTable.columns\n            .filter(column => columnNames.indexOf(column.name) !== -1)\n            .forEach(column => column.isPrimary = true);\n\n        const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n        const columnNamesString = columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        upQueries.push(new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${pkName}\" PRIMARY KEY (${columnNamesString})`));\n        downQueries.push(new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${pkName}\"`));\n\n        await this.executeQueries(upQueries, downQueries);\n        this.replaceCachedTable(table, clonedTable);\n    }\n\n    /**\n     * Drops a primary key.\n     */\n    async dropPrimaryKey(tableOrName: Table|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const up = this.dropPrimaryKeySql(table);\n        const down = this.createPrimaryKeySql(table, table.primaryColumns.map(column => column.name));\n        await this.executeQueries(up, down);\n        table.primaryColumns.forEach(column => {\n            column.isPrimary = false;\n        });\n    }\n\n    /**\n     * Creates a new unique constraint.\n     */\n    async createUniqueConstraint(tableOrName: Table|string, uniqueConstraint: TableUnique): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!uniqueConstraint.name)\n            uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n\n        const up = this.createUniqueConstraintSql(table, uniqueConstraint);\n        const down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n        await this.executeQueries(up, down);\n        table.addUniqueConstraint(uniqueConstraint);\n    }\n\n    /**\n     * Creates a new unique constraints.\n     */\n    async createUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        const promises = uniqueConstraints.map(uniqueConstraint => this.createUniqueConstraint(tableOrName, uniqueConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops an unique constraint.\n     */\n    async dropUniqueConstraint(tableOrName: Table|string, uniqueOrName: TableUnique|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(u => u.name === uniqueOrName);\n        if (!uniqueConstraint)\n            throw new Error(`Supplied unique constraint was not found in table ${table.name}`);\n\n        const up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n        const down = this.createUniqueConstraintSql(table, uniqueConstraint);\n        await this.executeQueries(up, down);\n        table.removeUniqueConstraint(uniqueConstraint);\n    }\n\n    /**\n     * Creates an unique constraints.\n     */\n    async dropUniqueConstraints(tableOrName: Table|string, uniqueConstraints: TableUnique[]): Promise<void> {\n        const promises = uniqueConstraints.map(uniqueConstraint => this.dropUniqueConstraint(tableOrName, uniqueConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates new check constraint.\n     */\n    async createCheckConstraint(tableOrName: Table|string, checkConstraint: TableCheck): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new unique constraint may be passed without name. In this case we generate unique name manually.\n        if (!checkConstraint.name)\n            checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression!);\n\n        const up = this.createCheckConstraintSql(table, checkConstraint);\n        const down = this.dropCheckConstraintSql(table, checkConstraint);\n        await this.executeQueries(up, down);\n        table.addCheckConstraint(checkConstraint);\n    }\n\n    /**\n     * Creates new check constraints.\n     */\n    async createCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        const promises = checkConstraints.map(checkConstraint => this.createCheckConstraint(tableOrName, checkConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops check constraint.\n     */\n    async dropCheckConstraint(tableOrName: Table|string, checkOrName: TableCheck|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(c => c.name === checkOrName);\n        if (!checkConstraint)\n            throw new Error(`Supplied check constraint was not found in table ${table.name}`);\n\n        const up = this.dropCheckConstraintSql(table, checkConstraint);\n        const down = this.createCheckConstraintSql(table, checkConstraint);\n        await this.executeQueries(up, down);\n        table.removeCheckConstraint(checkConstraint);\n    }\n\n    /**\n     * Drops check constraints.\n     */\n    async dropCheckConstraints(tableOrName: Table|string, checkConstraints: TableCheck[]): Promise<void> {\n        const promises = checkConstraints.map(checkConstraint => this.dropCheckConstraint(tableOrName, checkConstraint));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates a new exclusion constraint.\n     */\n    async createExclusionConstraint(tableOrName: Table|string, exclusionConstraint: TableExclusion): Promise<void> {\n        throw new Error(`Oracle does not support exclusion constraints.`);\n    }\n\n    /**\n     * Creates a new exclusion constraints.\n     */\n    async createExclusionConstraints(tableOrName: Table|string, exclusionConstraints: TableExclusion[]): Promise<void> {\n        throw new Error(`Oracle does not support exclusion constraints.`);\n    }\n\n    /**\n     * Drops exclusion constraint.\n     */\n    async dropExclusionConstraint(tableOrName: Table|string, exclusionOrName: TableExclusion|string): Promise<void> {\n        throw new Error(`Oracle does not support exclusion constraints.`);\n    }\n\n    /**\n     * Drops exclusion constraints.\n     */\n    async dropExclusionConstraints(tableOrName: Table|string, exclusionConstraints: TableExclusion[]): Promise<void> {\n        throw new Error(`Oracle does not support exclusion constraints.`);\n    }\n\n    /**\n     * Creates a new foreign key.\n     */\n    async createForeignKey(tableOrName: Table|string, foreignKey: TableForeignKey): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new FK may be passed without name. In this case we generate FK name manually.\n        if (!foreignKey.name)\n            foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames);\n\n        const up = this.createForeignKeySql(table, foreignKey);\n        const down = this.dropForeignKeySql(table, foreignKey);\n        await this.executeQueries(up, down);\n        table.addForeignKey(foreignKey);\n    }\n\n    /**\n     * Creates a new foreign keys.\n     */\n    async createForeignKeys(tableOrName: Table|string, foreignKeys: TableForeignKey[]): Promise<void> {\n        const promises = foreignKeys.map(foreignKey => this.createForeignKey(tableOrName, foreignKey));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops a foreign key from the table.\n     */\n    async dropForeignKey(tableOrName: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(fk => fk.name === foreignKeyOrName);\n        if (!foreignKey)\n            throw new Error(`Supplied foreign key was not found in table ${table.name}`);\n\n        const up = this.dropForeignKeySql(table, foreignKey);\n        const down = this.createForeignKeySql(table, foreignKey);\n        await this.executeQueries(up, down);\n        table.removeForeignKey(foreignKey);\n    }\n\n    /**\n     * Drops a foreign keys from the table.\n     */\n    async dropForeignKeys(tableOrName: Table|string, foreignKeys: TableForeignKey[]): Promise<void> {\n        const promises = foreignKeys.map(foreignKey => this.dropForeignKey(tableOrName, foreignKey));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Creates a new index.\n     */\n    async createIndex(tableOrName: Table|string, index: TableIndex): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n\n        // new index may be passed without name. In this case we generate index name manually.\n        if (!index.name)\n            index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n\n        const up = this.createIndexSql(table, index);\n        const down = this.dropIndexSql(index);\n        await this.executeQueries(up, down);\n        table.addIndex(index);\n    }\n\n    /**\n     * Creates a new indices\n     */\n    async createIndices(tableOrName: Table|string, indices: TableIndex[]): Promise<void> {\n        const promises = indices.map(index => this.createIndex(tableOrName, index));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Drops an index from the table.\n     */\n    async dropIndex(tableOrName: Table|string, indexOrName: TableIndex|string): Promise<void> {\n        const table = tableOrName instanceof Table ? tableOrName : await this.getCachedTable(tableOrName);\n        const index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(i => i.name === indexOrName);\n        if (!index)\n            throw new Error(`Supplied index was not found in table ${table.name}`);\n\n        const up = this.dropIndexSql(index);\n        const down = this.createIndexSql(table, index);\n        await this.executeQueries(up, down);\n        table.removeIndex(index);\n    }\n\n    /**\n     * Drops an indices from the table.\n     */\n    async dropIndices(tableOrName: Table|string, indices: TableIndex[]): Promise<void> {\n        const promises = indices.map(index => this.dropIndex(tableOrName, index));\n        await Promise.all(promises);\n    }\n\n    /**\n     * Clears all table contents.\n     * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n     */\n    async clearTable(tableName: string): Promise<void> {\n        await this.query(`TRUNCATE TABLE \"${tableName}\"`);\n    }\n\n    /**\n     * Removes all tables from the currently connected database.\n     */\n    async clearDatabase(): Promise<void> {\n        await this.startTransaction();\n        try {\n            const dropViewsQuery = `SELECT 'DROP VIEW \"' || VIEW_NAME || '\"' AS \"query\" FROM \"USER_VIEWS\"`;\n            const dropViewQueries: ObjectLiteral[] = await this.query(dropViewsQuery);\n            await Promise.all(dropViewQueries.map(query => this.query(query[\"query\"])));\n\n            const dropTablesQuery = `SELECT 'DROP TABLE \"' || TABLE_NAME || '\" CASCADE CONSTRAINTS' AS \"query\" FROM \"USER_TABLES\"`;\n            const dropTableQueries: ObjectLiteral[] = await this.query(dropTablesQuery);\n            await Promise.all(dropTableQueries.map(query => this.query(query[\"query\"])));\n            await this.commitTransaction();\n\n        } catch (error) {\n            try { // we throw original error even if rollback thrown an error\n                await this.rollbackTransaction();\n            } catch (rollbackError) { }\n            throw error;\n        }\n\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    protected async loadViews(viewNames: string[]): Promise<View[]> {\n        const hasTable = await this.hasTable(this.getTypeormMetadataTableName());\n        if (!hasTable)\n            return Promise.resolve([]);\n\n        const viewNamesString = viewNames.map(name => \"'\" + name + \"'\").join(\", \");\n        let query = `SELECT \"T\".* FROM \"${this.getTypeormMetadataTableName()}\" \"T\" INNER JOIN \"USER_VIEWS\" \"V\" ON \"V\".\"VIEW_NAME\" = \"T\".\"name\" WHERE \"T\".\"type\" = 'VIEW'`;\n        if (viewNamesString.length > 0)\n            query += ` AND \"T\".\"name\" IN (${viewNamesString})`;\n        const dbViews = await this.query(query);\n        return dbViews.map((dbView: any) => {\n            const view = new View();\n            view.name = dbView[\"name\"];\n            view.expression = dbView[\"value\"];\n            return view;\n        });\n    }\n\n    /**\n     * Loads all tables (with given names) from the database and creates a Table from them.\n     */\n    protected async loadTables(tableNames: string[]): Promise<Table[]> {\n\n        // if no tables given then no need to proceed\n        if (!tableNames || !tableNames.length)\n            return [];\n\n        // load tables, columns, indices and foreign keys\n        const tableNamesString = tableNames.map(name => \"'\" + name + \"'\").join(\", \");\n        const tablesSql = `SELECT * FROM \"USER_TABLES\" WHERE \"TABLE_NAME\" IN (${tableNamesString})`;\n        const columnsSql = `SELECT * FROM \"USER_TAB_COLS\" WHERE \"TABLE_NAME\" IN (${tableNamesString})`;\n\n        const indicesSql = `SELECT \"IND\".\"INDEX_NAME\", \"IND\".\"TABLE_NAME\", \"IND\".\"UNIQUENESS\", ` +\n            `LISTAGG (\"COL\".\"COLUMN_NAME\", ',') WITHIN GROUP (ORDER BY \"COL\".\"COLUMN_NAME\") AS \"COLUMN_NAMES\" ` +\n            `FROM \"USER_INDEXES\" \"IND\" ` +\n            `INNER JOIN \"USER_IND_COLUMNS\" \"COL\" ON \"COL\".\"INDEX_NAME\" = \"IND\".\"INDEX_NAME\" ` +\n            `LEFT JOIN \"USER_CONSTRAINTS\" \"CON\" ON \"CON\".\"CONSTRAINT_NAME\" = \"IND\".\"INDEX_NAME\" ` +\n            `WHERE \"IND\".\"TABLE_NAME\" IN (${tableNamesString}) AND \"CON\".\"CONSTRAINT_NAME\" IS NULL ` +\n            `GROUP BY \"IND\".\"INDEX_NAME\", \"IND\".\"TABLE_NAME\", \"IND\".\"UNIQUENESS\"`;\n\n        const foreignKeysSql = `SELECT \"C\".\"CONSTRAINT_NAME\", \"C\".\"TABLE_NAME\", \"COL\".\"COLUMN_NAME\", \"REF_COL\".\"TABLE_NAME\" AS \"REFERENCED_TABLE_NAME\", ` +\n            `\"REF_COL\".\"COLUMN_NAME\" AS \"REFERENCED_COLUMN_NAME\", \"C\".\"DELETE_RULE\" AS \"ON_DELETE\" ` +\n            `FROM \"USER_CONSTRAINTS\" \"C\" ` +\n            `INNER JOIN \"USER_CONS_COLUMNS\" \"COL\" ON \"COL\".\"OWNER\" = \"C\".\"OWNER\" AND \"COL\".\"CONSTRAINT_NAME\" = \"C\".\"CONSTRAINT_NAME\" ` +\n            `INNER JOIN \"USER_CONS_COLUMNS\" \"REF_COL\" ON \"REF_COL\".\"OWNER\" = \"C\".\"R_OWNER\" AND \"REF_COL\".\"CONSTRAINT_NAME\" = \"C\".\"R_CONSTRAINT_NAME\" AND \"REF_COL\".\"POSITION\" = \"COL\".\"POSITION\" ` +\n            `WHERE \"C\".\"TABLE_NAME\" IN (${tableNamesString}) AND \"C\".\"CONSTRAINT_TYPE\" = 'R'`;\n\n        const constraintsSql = `SELECT \"C\".\"CONSTRAINT_NAME\", \"C\".\"CONSTRAINT_TYPE\", \"C\".\"TABLE_NAME\", \"COL\".\"COLUMN_NAME\", \"C\".\"SEARCH_CONDITION\" ` +\n            `FROM \"USER_CONSTRAINTS\" \"C\" ` +\n            `INNER JOIN \"USER_CONS_COLUMNS\" \"COL\" ON \"COL\".\"OWNER\" = \"C\".\"OWNER\" AND \"COL\".\"CONSTRAINT_NAME\" = \"C\".\"CONSTRAINT_NAME\" ` +\n            `WHERE \"C\".\"TABLE_NAME\" IN (${tableNamesString}) AND \"C\".\"CONSTRAINT_TYPE\" IN ('C', 'U', 'P') AND \"C\".\"GENERATED\" = 'USER NAME'`;\n\n        const [dbTables, dbColumns, dbIndices, dbForeignKeys, dbConstraints]: ObjectLiteral[][] = await Promise.all([\n            this.query(tablesSql),\n            this.query(columnsSql),\n            this.query(indicesSql),\n            this.query(foreignKeysSql),\n            this.query(constraintsSql),\n        ]);\n\n        // if tables were not found in the db, no need to proceed\n        if (!dbTables.length)\n            return [];\n\n        // create tables for loaded tables\n        return dbTables.map(dbTable => {\n            const table = new Table();\n            table.name = dbTable[\"TABLE_NAME\"];\n\n            // create columns from the loaded columns\n            table.columns = dbColumns\n                .filter(dbColumn => dbColumn[\"TABLE_NAME\"] === table.name)\n                .map(dbColumn => {\n                    const columnConstraints = dbConstraints.filter(dbConstraint => dbConstraint[\"TABLE_NAME\"] === table.name && dbConstraint[\"COLUMN_NAME\"] === dbColumn[\"COLUMN_NAME\"]);\n\n                    const uniqueConstraint = columnConstraints.find(constraint => constraint[\"CONSTRAINT_TYPE\"] === \"U\");\n                    const isConstraintComposite = uniqueConstraint\n                        ? !!dbConstraints.find(dbConstraint => dbConstraint[\"CONSTRAINT_TYPE\"] === \"U\"\n                            && dbConstraint[\"CONSTRAINT_NAME\"] === uniqueConstraint[\"CONSTRAINT_NAME\"]\n                            && dbConstraint[\"COLUMN_NAME\"] !== dbColumn[\"COLUMN_NAME\"])\n                        : false;\n                    const isUnique = !!uniqueConstraint && !isConstraintComposite;\n\n                    const isPrimary = !!columnConstraints.find(constraint =>  constraint[\"CONSTRAINT_TYPE\"] === \"P\");\n\n                    const tableColumn = new TableColumn();\n                    tableColumn.name = dbColumn[\"COLUMN_NAME\"];\n                    tableColumn.type = dbColumn[\"DATA_TYPE\"].toLowerCase();\n                    if (tableColumn.type.indexOf(\"(\") !== -1)\n                        tableColumn.type = tableColumn.type.replace(/\\([0-9]*\\)/, \"\");\n\n                    // check only columns that have length property\n                    if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type as ColumnType) !== -1) {\n                        const length = tableColumn.type === \"raw\" ? dbColumn[\"DATA_LENGTH\"] : dbColumn[\"CHAR_COL_DECL_LENGTH\"];\n                        tableColumn.length = length && !this.isDefaultColumnLength(table, tableColumn, length) ? length.toString() : \"\";\n                    }\n\n                    if (tableColumn.type === \"number\" || tableColumn.type === \"float\") {\n                        if (dbColumn[\"DATA_PRECISION\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"DATA_PRECISION\"]))\n                            tableColumn.precision = dbColumn[\"DATA_PRECISION\"];\n                        if (dbColumn[\"DATA_SCALE\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"DATA_SCALE\"]))\n                            tableColumn.scale = dbColumn[\"DATA_SCALE\"];\n\n                    } else if ((tableColumn.type === \"timestamp\"\n                        || tableColumn.type === \"timestamp with time zone\"\n                        || tableColumn.type === \"timestamp with local time zone\") && dbColumn[\"DATA_SCALE\"] !== null) {\n                        tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"DATA_SCALE\"]) ? dbColumn[\"DATA_SCALE\"] : undefined;\n                    }\n\n                    tableColumn.default = dbColumn[\"DATA_DEFAULT\"] !== null\n                        && dbColumn[\"DATA_DEFAULT\"] !== undefined\n                        && dbColumn[\"DATA_DEFAULT\"].trim() !== \"NULL\" ? tableColumn.default = dbColumn[\"DATA_DEFAULT\"].trim() : undefined;\n\n                    tableColumn.isNullable = dbColumn[\"NULLABLE\"] === \"Y\";\n                    tableColumn.isUnique = isUnique;\n                    tableColumn.isPrimary = isPrimary;\n                    tableColumn.isGenerated = dbColumn[\"IDENTITY_COLUMN\"] === \"YES\";\n                    if (tableColumn.isGenerated) {\n                        tableColumn.generationStrategy = \"increment\";\n                        tableColumn.default = undefined;\n                    }\n                    tableColumn.comment = \"\"; // todo\n                    return tableColumn;\n                });\n\n            // find unique constraints of table, group them by constraint name and build TableUnique.\n            const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return dbConstraint[\"TABLE_NAME\"] === table.name && dbConstraint[\"CONSTRAINT_TYPE\"] === \"U\";\n            }), dbConstraint => dbConstraint[\"CONSTRAINT_NAME\"]);\n\n            table.uniques = tableUniqueConstraints.map(constraint => {\n                const uniques = dbConstraints.filter(dbC => dbC[\"CONSTRAINT_NAME\"] === constraint[\"CONSTRAINT_NAME\"]);\n                return new TableUnique({\n                    name: constraint[\"CONSTRAINT_NAME\"],\n                    columnNames: uniques.map(u => u[\"COLUMN_NAME\"])\n                });\n            });\n\n            // find check constraints of table, group them by constraint name and build TableCheck.\n            const tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(dbConstraint => {\n                return dbConstraint[\"TABLE_NAME\"] === table.name && dbConstraint[\"CONSTRAINT_TYPE\"] === \"C\";\n            }), dbConstraint => dbConstraint[\"CONSTRAINT_NAME\"]);\n\n            table.checks = tableCheckConstraints.map(constraint => {\n                const checks = dbConstraints.filter(dbC => dbC[\"CONSTRAINT_NAME\"] === constraint[\"CONSTRAINT_NAME\"]);\n                return new TableCheck({\n                    name: constraint[\"CONSTRAINT_NAME\"],\n                    columnNames: checks.map(c => c[\"COLUMN_NAME\"]),\n                    expression: constraint[\"SEARCH_CONDITION\"]\n                });\n            });\n\n            // find foreign key constraints of table, group them by constraint name and build TableForeignKey.\n            const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(dbForeignKey => {\n                return dbForeignKey[\"TABLE_NAME\"] === table.name;\n            }), dbForeignKey => dbForeignKey[\"CONSTRAINT_NAME\"]);\n\n            table.foreignKeys = tableForeignKeyConstraints.map(dbForeignKey => {\n                const foreignKeys = dbForeignKeys.filter(dbFk => dbFk[\"CONSTRAINT_NAME\"] === dbForeignKey[\"CONSTRAINT_NAME\"]);\n                return new TableForeignKey({\n                    name: dbForeignKey[\"CONSTRAINT_NAME\"],\n                    columnNames: foreignKeys.map(dbFk => dbFk[\"COLUMN_NAME\"]),\n                    referencedTableName: dbForeignKey[\"REFERENCED_TABLE_NAME\"],\n                    referencedColumnNames: foreignKeys.map(dbFk => dbFk[\"REFERENCED_COLUMN_NAME\"]),\n                    onDelete: dbForeignKey[\"ON_DELETE\"],\n                    onUpdate: \"NO ACTION\", // Oracle does not have onUpdate option in FK's, but we need it for proper synchronization\n                });\n            });\n\n            // create TableIndex objects from the loaded indices\n            table.indices = dbIndices\n                .filter(dbIndex => dbIndex[\"TABLE_NAME\"] === table.name)\n                .map(dbIndex => {\n                    return new TableIndex({\n                        name: dbIndex[\"INDEX_NAME\"],\n                        columnNames: dbIndex[\"COLUMN_NAMES\"].split(\",\"),\n                        isUnique: dbIndex[\"UNIQUENESS\"] === \"UNIQUE\"\n                    });\n                });\n\n            return table;\n        });\n    }\n\n    /**\n     * Builds and returns SQL for create table.\n     */\n    protected createTableSql(table: Table, createForeignKeys?: boolean): Query {\n        const columnDefinitions = table.columns.map(column => this.buildCreateColumnSql(column)).join(\", \");\n        let sql = `CREATE TABLE \"${table.name}\" (${columnDefinitions}`;\n\n        table.columns\n            .filter(column => column.isUnique)\n            .forEach(column => {\n                const isUniqueExist = table.uniques.some(unique => unique.columnNames.length === 1 && unique.columnNames[0] === column.name);\n                if (!isUniqueExist)\n                    table.uniques.push(new TableUnique({\n                        name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n                        columnNames: [column.name]\n                    }));\n            });\n\n        if (table.uniques.length > 0) {\n            const uniquesSql = table.uniques.map(unique => {\n                const uniqueName = unique.name ? unique.name : this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n                const columnNames = unique.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                return `CONSTRAINT \"${uniqueName}\" UNIQUE (${columnNames})`;\n            }).join(\", \");\n\n            sql += `, ${uniquesSql}`;\n        }\n\n        if (table.checks.length > 0) {\n            const checksSql = table.checks.map(check => {\n                const checkName = check.name ? check.name : this.connection.namingStrategy.checkConstraintName(table.name, check.expression!);\n                return `CONSTRAINT \"${checkName}\" CHECK (${check.expression})`;\n            }).join(\", \");\n\n            sql += `, ${checksSql}`;\n        }\n\n        if (table.foreignKeys.length > 0 && createForeignKeys) {\n            const foreignKeysSql = table.foreignKeys.map(fk => {\n                const columnNames = fk.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                if (!fk.name)\n                    fk.name = this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames);\n                const referencedColumnNames = fk.referencedColumnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n                let constraint = `CONSTRAINT \"${fk.name}\" FOREIGN KEY (${columnNames}) REFERENCES \"${fk.referencedTableName}\" (${referencedColumnNames})`;\n                if (fk.onDelete && fk.onDelete !== \"NO ACTION\") // Oracle does not support NO ACTION, but we set NO ACTION by default in EntityMetadata\n                    constraint += ` ON DELETE ${fk.onDelete}`;\n\n                return constraint;\n            }).join(\", \");\n\n            sql += `, ${foreignKeysSql}`;\n        }\n\n        const primaryColumns = table.columns.filter(column => column.isPrimary);\n        if (primaryColumns.length > 0) {\n            const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(column => column.name));\n            const columnNames = primaryColumns.map(column => `\"${column.name}\"`).join(\", \");\n            sql += `, CONSTRAINT \"${primaryKeyName}\" PRIMARY KEY (${columnNames})`;\n        }\n\n        sql += `)`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop table sql.\n     */\n    protected dropTableSql(tableOrName: Table|string, ifExist?: boolean): Query {\n        const tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n        const query = ifExist ? `DROP TABLE IF EXISTS \"${tableName}\"` : `DROP TABLE \"${tableName}\"`;\n        return new Query(query);\n    }\n\n    protected createViewSql(view: View): Query {\n        if (typeof view.expression === \"string\") {\n            return new Query(`CREATE VIEW \"${view.name}\" AS ${view.expression}`);\n        } else {\n            return new Query(`CREATE VIEW \"${view.name}\" AS ${view.expression(this.connection).getQuery()}`);\n        }\n    }\n\n    protected insertViewDefinitionSql(view: View): Query {\n        const expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n        const [query, parameters] = this.connection.createQueryBuilder()\n            .insert()\n            .into(this.getTypeormMetadataTableName())\n            .values({ type: \"VIEW\", name: view.name, value: expression })\n            .getQueryAndParameters();\n\n        return new Query(query, parameters);\n    }\n\n    /**\n     * Builds drop view sql.\n     */\n    protected dropViewSql(viewOrPath: View|string): Query {\n        const viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n        return new Query(`DROP VIEW \"${viewName}\"`);\n    }\n\n    /**\n     * Builds remove view sql.\n     */\n    protected deleteViewDefinitionSql(viewOrPath: View|string): Query {\n        const viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n        const qb = this.connection.createQueryBuilder();\n        const [query, parameters] = qb.delete()\n            .from(this.getTypeormMetadataTableName())\n            .where(`${qb.escape(\"type\")} = 'VIEW'`)\n            .andWhere(`${qb.escape(\"name\")} = :name`, { name: viewName })\n            .getQueryAndParameters();\n\n        return new Query(query, parameters);\n    }\n\n    /**\n     * Builds create index sql.\n     */\n    protected createIndexSql(table: Table, index: TableIndex): Query {\n        const columns = index.columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        return new Query(`CREATE ${index.isUnique ? \"UNIQUE \" : \"\"}INDEX \"${index.name}\" ON \"${table.name}\" (${columns})`);\n    }\n\n    /**\n     * Builds drop index sql.\n     */\n    protected dropIndexSql(indexOrName: TableIndex|string): Query {\n        let indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n        return new Query(`DROP INDEX \"${indexName}\"`);\n    }\n\n    /**\n     * Builds create primary key sql.\n     */\n    protected createPrimaryKeySql(table: Table, columnNames: string[]): Query {\n        const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n        const columnNamesString = columnNames.map(columnName => `\"${columnName}\"`).join(\", \");\n        return new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${primaryKeyName}\" PRIMARY KEY (${columnNamesString})`);\n    }\n\n    /**\n     * Builds drop primary key sql.\n     */\n    protected dropPrimaryKeySql(table: Table): Query {\n        const columnNames = table.primaryColumns.map(column => column.name);\n        const primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n        return new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${primaryKeyName}\"`);\n    }\n\n    /**\n     * Builds create unique constraint sql.\n     */\n    protected createUniqueConstraintSql(table: Table, uniqueConstraint: TableUnique): Query {\n        const columnNames = uniqueConstraint.columnNames.map(column => `\"` + column + `\"`).join(\", \");\n        return new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${uniqueConstraint.name}\" UNIQUE (${columnNames})`);\n    }\n\n    /**\n     * Builds drop unique constraint sql.\n     */\n    protected dropUniqueConstraintSql(table: Table, uniqueOrName: TableUnique|string): Query {\n        const uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n        return new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${uniqueName}\"`);\n    }\n\n    /**\n     * Builds create check constraint sql.\n     */\n    protected createCheckConstraintSql(table: Table, checkConstraint: TableCheck): Query {\n        return new Query(`ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${checkConstraint.name}\" CHECK (${checkConstraint.expression})`);\n    }\n\n    /**\n     * Builds drop check constraint sql.\n     */\n    protected dropCheckConstraintSql(table: Table, checkOrName: TableCheck|string): Query {\n        const checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n        return new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${checkName}\"`);\n    }\n\n    /**\n     * Builds create foreign key sql.\n     */\n    protected createForeignKeySql(table: Table, foreignKey: TableForeignKey): Query {\n        const columnNames = foreignKey.columnNames.map(column => `\"` + column + `\"`).join(\", \");\n        const referencedColumnNames = foreignKey.referencedColumnNames.map(column => `\"` + column + `\"`).join(\",\");\n        let sql = `ALTER TABLE \"${table.name}\" ADD CONSTRAINT \"${foreignKey.name}\" FOREIGN KEY (${columnNames}) ` +\n            `REFERENCES \"${foreignKey.referencedTableName}\" (${referencedColumnNames})`;\n        // Oracle does not support NO ACTION, but we set NO ACTION by default in EntityMetadata\n        if (foreignKey.onDelete && foreignKey.onDelete !== \"NO ACTION\")\n            sql += ` ON DELETE ${foreignKey.onDelete}`;\n\n        return new Query(sql);\n    }\n\n    /**\n     * Builds drop foreign key sql.\n     */\n    protected dropForeignKeySql(table: Table, foreignKeyOrName: TableForeignKey|string): Query {\n        const foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n        return new Query(`ALTER TABLE \"${table.name}\" DROP CONSTRAINT \"${foreignKeyName}\"`);\n    }\n\n    /**\n     * Builds a query for create column.\n     */\n    protected buildCreateColumnSql(column: TableColumn) {\n        let c = `\"${column.name}\" ` + this.connection.driver.createFullType(column);\n        if (column.charset)\n            c += \" CHARACTER SET \" + column.charset;\n        if (column.collation)\n            c += \" COLLATE \" + column.collation;\n        if (column.default !== undefined && column.default !== null) // DEFAULT must be placed before NOT NULL\n            c += \" DEFAULT \" + column.default;\n        if (column.isNullable !== true && !column.isGenerated) // NOT NULL is not supported with GENERATED\n            c += \" NOT NULL\";\n        if (column.isGenerated === true && column.generationStrategy === \"increment\")\n            c += \" GENERATED ALWAYS AS IDENTITY\";\n\n        return c;\n    }\n\n\n}\n"],"sourceRoot":"../.."}