a thógáil? Sí...">
,需要通过父级DOM结构来判断
*/
var trackActionPhone = function (node) {
var nodeInnerText = node.innerText || '';
if (!limitRegLength(nodeInnerText)) return;
var nodeText = trimText(nodeInnerText);
if (nodeText.length < 5 || nodeText.length > 20) return false;
var type =
arguments.length > 1 && arguments[1] !== undefined
? arguments[1]
: 'click';
var str = trimText(node.href || node.innerHTML || '');
if (phoneReg.test(str) && numUseReg.test(str)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
phone: nodeText,
},
}, '*');
_paq.push(['trackEvent', type, 'phone', nodeText]);
return true;
}
/** 排查父级嵌套非标签场景,并且对dom的正则校验做一个性能兜底,通过控制innerText的长度,来确保正则的性能 */
var fatherText = trimText(node.parentNode.innerText || '');
if (fatherText.length < 5 || fatherText.length > 20) return false;
var fatherDom = trimText(node.parentNode.innerHTML || '');
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
phone: nodeText,
},
}, '*');
_paq.push(['trackEvent', type, 'phone', nodeText]);
return true;
}
return false;
};
window.addEventListener('click', function (e) {
var node = e.target;
/** 社媒点击 */
var appName = '';
var getAppAriaLabel =
node.ariaLabel || node.parentNode.ariaLabel || '';
if (mediaList.includes(getAppAriaLabel.toLowerCase())) {
appName = getAppAriaLabel;
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'a'
) {
appName = getMediaName(node.href) || getMediaName(node.alt);
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'img'
) {
appName = getMediaName(node.alt) || getMediaName(node.src);
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'i'
) {
appName = getMediaName(node.className);
}
if (appName) {
_paq.push(['trackEvent', 'click', 'contactApp', appName]);
return;
}
/** 联系方式点击 */
if (trackActionPhone(node, 'click')) return;
if (node.nodeName && node.nodeName.toLowerCase() === 'a') {
var val = node.href;
if (!limitRegLength(val)) return;
if (emailReg.test(val)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: val,
},
}, '*');
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
if (node.nodeName && node.nodeName.toLowerCase() === 'i') {
var val = node.className;
var content = node.parentNode.href || '';
if (val.includes('email')) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: content,
},
}, '*');
_paq.push(['trackEvent', 'click', 'email', content]);
return;
}
}
var nodeChildList = node.childNodes;
for (var i = 0; i < nodeChildList.length; i++) {
if (nodeChildList[i].nodeType !== 3) continue;
var val = nodeChildList[i].textContent.replace(/\s?:?/g, '');
if (!limitRegLength(val)) continue;
if (emailReg.test(val)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: val,
},
}, '*');
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
trackNumberData(node);
});
window.addEventListener('copy', function (e) {
if (trackActionPhone(e.target, 'copy')) return;
var text = e.target.textContent;
if (!text) return;
var val = text.replace(/\s:?/g, '');
if (!limitRegLength(val)) return;
if (emailReg.test(val)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: val,
},
}, '*');
_paq.push(['trackEvent', 'copy', 'email', val]);
return;
}
trackNumberData(e.target);
});
}
trackContactInit();
/**
* 基于custom_inquiry_form.js 以及 form.js 对于询盘表单提交的实现,来反推询盘表单的input标签触发,用来收集意向客户
* 1. 缓存的KEY:TRACK_INPUT_ID_MTM_00;
* 2. 缓存策略 - lockTrackInput:单个页面内,10分钟内,不重复上报
*/
function trackActionInput() {
const CACHE_KEY = 'TRACK_INPUT_ID_MTM_00';
const pathName = window.location.hostname + window.location.pathname;
var lockTrackInput = function () {
try {
const lastCacheData = localStorage.getItem(CACHE_KEY);
if (!lastCacheData) return false;
const cacheData = JSON.parse(lastCacheData);
const cacheTime = cacheData[pathName];
if (!cacheTime) return false;
return Date.now() - cacheTime < 1000 * 60 * 10; // 10分钟内,不重复上报
} catch (error) {
console.error('lockTrackInput Error', error);
return false;
}
};
var setInputTrackId = function () {
try {
const curCacheData = localStorage.getItem(CACHE_KEY);
if (curCacheData) {
const cacheData = JSON.parse(curCacheData);
cacheData[pathName] = Date.now();
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
return;
}
const cacheData = {
[pathName]: Date.now(),
};
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
} catch (error) {
console.error('setInputTrackId Error', error);
}
};
var getInputDom = function (initDom) {
var ele = initDom;
while (ele) {
/**
* isWebSiteForm 是站点的表单
* isChatWindowForm 是聊天窗口的表单
*/
/** 旧模板表单 */
var isWebSiteForm = !!(
/crm-form/i.test(ele.className) && ele.querySelector('form')
);
/** 1:新模板自定义表单、2:Get a Quote 弹框表单 */
var isWebSiteFormNew = !!(
/inquiry/i.test(ele.className) && ele.querySelector('form')
);
if (isWebSiteForm || isWebSiteFormNew) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'page']);
setInputTrackId();
return;
}
/** Mkt会话触达-聊天弹框的表单输入: MKT由于是iframe嵌入,所以MKT的上报,会单独写到MKT-form代码上 */
var isInquiryChatForm = !!(
/comp-form/i.test(ele.className) && ele.querySelector('form')
);
if (isInquiryChatForm) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'chat']);
setInputTrackId();
return;
}
/** 向上查找父节点 */
ele = ele.parentNode;
}
};
function initInputListener() {
var inputUseDebounce = function (fn, delay) {
var timer = null;
var that = this;
return function () {
var args = Array.prototype.slice.call(arguments);
if (timer) clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(that, args);
}, delay);
};
};
var optimizeGetInputDom = inputUseDebounce(getInputDom, 300);
window.addEventListener('input', function (e) {
/** 如果已经上报过,则不再上报 */
if (lockTrackInput()) return;
optimizeGetInputDom(e.target);
});
}
try {
initInputListener();
} catch (error) {
console.log('initInputListener Error', error);
}
}
trackActionInput();
}
/** 第三方消息上报:目前主要是针对全点托管会话;在msgCollect/index.js中调试,访问test.html */
function thirdMsgCollect() {
/** 先检测是否是stayReal托管:如果stayReal脚本都没有,那么说明当前站点未开启stayReal会话托管 */
const scriptList = Array.prototype.slice.call(
document.querySelectorAll('script'),
);
const checkStayReal = () =>
!!scriptList.find((s) => s.src.includes('stayreal.xiaoman.cn'));
if (!checkStayReal()) return;
/** 缓存当前消息队列的最后一条消息id */
const CACHE_KEY = 'CACHE_KEY_MONITOR';
const setCache = (msgIndex) => {
/** 对缓存KEY进行base64转码处理 */
const cacheMsgIndex = btoa(msgIndex);
localStorage.setItem(CACHE_KEY, cacheMsgIndex);
};
const getCache = () => {
const cacheMsgIndex = localStorage.getItem(CACHE_KEY);
if (cacheMsgIndex) return Number(atob(cacheMsgIndex));
return -1;
};
/** 拉取最新msg列表 */
const pullMsgList = () => {
const msgEleList = Array.prototype.slice.call(
document.querySelectorAll('#chat-list li'),
);
const msgIds = [];
const msgMap = msgEleList.reduce((acc, item) => {
const sendTime = item
.querySelector('.message-data-time')
.textContent.trim();
const sendContent = item.querySelector('.message').textContent.trim();
/** msg带有class:other-message的是访客消息,my-message的是客服消息 */
const isOtherMessage = item
.querySelector('.message')
.classList.contains('other-message');
const msgId = item.querySelector('.message').getAttribute('id');
const msgItemData = {
msgId,
user: isOtherMessage ? 'visitor' : 'official',
time: sendTime,
content: sendContent,
};
msgIds.push(msgId);
acc[msgId] = msgItemData;
return acc;
}, {});
return {
ids: msgIds,
dataMap: msgMap,
};
};
/** 加密并上传消息数据 */
let ENCRYPT_KEY = 'de29f1aab63ab033';
let ENCRYPT_IV = 'b8d2badf875e76ac';
const baseUrl = 'https://cms.xiaoman.cn';
// var getEncryptConfig = function () {
// const url = baseUrl + '/shop-api/innerApi/getKeyIv'
// $.get(
// url,
// function (result) {
// console.log('result', result)
// if (Number(result.code) === 0 && result.data.key && result.data.iv) {
// ENCRYPT_KEY = result.data.key
// ENCRYPT_IV = result.data.iv
// uploadMsgData()
// } else {
// /** 如果获取失败,则重试 */
// setTimeout(() => {
// getEncryptConfig()
// }, 1000)
// }
// },
// 'json'
// )
// }
// getEncryptConfig()
const encryptMsg = function (msgData) {
const enc = new TextEncoder();
// 转字节
const keyBytes = enc.encode(ENCRYPT_KEY);
const ivBytes = enc.encode(ENCRYPT_IV);
const plainBytes = enc.encode(msgData);
// 导入密钥并加密
return crypto.subtle
.importKey('raw', keyBytes, { name: 'AES-CBC' }, false, ['encrypt'])
.then(function (cryptoKey) {
return crypto.subtle.encrypt(
{ name: 'AES-CBC', iv: ivBytes },
cryptoKey,
plainBytes,
);
})
.then(function (encryptedBuffer) {
// 转 base64 返回
return btoa(
String.fromCharCode(...new Uint8Array(encryptedBuffer)),
);
})
.catch((err) => {
return Promise.reject(err);
});
};
let uploadFlag = false;
const uploadMsgData = function () {
if (uploadFlag) return;
uploadFlag = true;
const { ids, dataMap } = pullMsgList();
let cacheMsgIndex = getCache();
const msgLen = ids.length;
if (!msgLen) {
// 消息DOM未挂载 || 消息DOM已挂载,但是消息列表为空
uploadFlag = false;
return;
}
if (msgLen - 1 < cacheMsgIndex) {
/** 针对站点挂后台一段时间,消息列表会自动塞入重复消息,导致消息有重复,刷新后又重置回正常消息列表,所以这里需要更新锚点下标 */
cacheMsgIndex = msgLen - 1;
setCache(cacheMsgIndex);
uploadFlag = false;
return;
}
if (msgLen - 1 === cacheMsgIndex) {
// 缓存的最后一次发送的消息ID是最后一条(说明当前消息均已经上报),则不跳过本地上报
uploadFlag = false;
return;
}
const currentMsgIds = ids.slice(cacheMsgIndex + 1, msgLen);
const currentMsgData = currentMsgIds.map((id) => dataMap[id]);
const mtmId = window.matomo_site_id_cookie_key || ''; // 获取mtm会话id
const msgBody = {
mtmId,
curl: window.location.href,
msgList: currentMsgData,
};
const msgBodyStr = JSON.stringify(msgBody);
encryptMsg(msgBodyStr)
.then(function (encryptedMsg) {
console.log('encryptedMsg:', encryptedMsg, msgBodyStr);
const url = baseUrl + '/shop-api/External/ListenSiteActiveStatus';
$.ajax({
type: 'POST',
url,
data: JSON.stringify({ d_v: encryptedMsg }),
contentType: 'application/json',
success: function (result) {
if (Number(result.code) === 0) {
// 更新消息队列
setCache(msgLen - 1);
}
uploadFlag = false;
},
error: function (err) {
console.error(err, '请求异常');
uploadFlag = false;
},
});
})
.catch((err) => {
console.error(err, '数据加密失败');
uploadFlag = false;
});
};
/** 监控chat-list的DOM变更 */
const initChatListObserver = () => {
// 需要监听的 DOM 节点
const target = document.getElementById('chat-list');
if (!target) return;
// 回调函数
const callback = function (mutationsList, observer) {
for (const mutation of mutationsList) {
console.log('mutation', mutation);
if (mutation.type === 'childList') {
uploadMsgData();
}
}
};
// 配置
const config = {
childList: true, // 监听子节点的增删
subtree: true, // 是否也监听后代节点
};
// 创建 observer
const observer = new MutationObserver(callback);
// 开始监听
observer.observe(target, config);
};
let testCount = 30;
let itv = null;
const checkChatDom = () => !!document.querySelector('#vc-model');
const initTalkCheck = () => {
itv = setTimeout(() => {
console.log('checkChatDom', checkChatDom(), testCount);
if (!checkChatDom() && testCount > 0) {
testCount--;
initTalkCheck();
return;
}
clearTimeout(itv);
uploadMsgData();
initChatListObserver();
}, 1500);
};
initTalkCheck();
}
try {
gtmTrack();
thirdMsgCollect();
console.log('inserted gtm code');
} catch (error) {
console.error('gtmTrack Error', error);
}
});
})();
An bhfuil suim agat beartas beag éagsúil agus spraíúil a úsáid chun do theach dream a dhearbhú? An ndearna tú riamh smaoineamh ar theaghlach beatha uathúil a thógáil a rinneadh as cóiste Teideal ? Táimid anseo ag CDPH críochnaithe againn féin ar chruthú uathúil agus ar thosca plánaí taiscigh doras do thithe do gach cineál saoil – rud amháin is é spás beatha costas-éifeachtach do theaghlaigh nó an t-easpa go beacht. Cibé rogha pearsanta nó stíl saoil atá agat, an bhfuil tú in annradh os cionn nádúr, ceolchoirm simplíochta mínimil nó tá tú tar éis teacht ar bheatha nua-aimseartha, tá na pleananna urlár theach coimeádach is coitianta againn ar féidir leat a chruthú agus a shaincheapadh, agus taispeánfaimid duit conas é a dhéanamh agus conas é a fháil go beacht. Nuair a dhearann tú teach inbhailí, níl aon teorainn le do roghanna. Ó theachán beaga compaideacha go dtí tithe móra do theaghlaigh, tá plána balla agus méid ann duit i dteach inbhailí. Má tá tú duine a theastaíonn go leor saoirse uait sa saol, ansin is é 1 sheomra codlata tigh faighte ar phléidí is é atá uait, mar tá sé faoi thuairim an plána balla is simplí is féidir leat a fháil ar inbhall forbartha. Tagann an dearadh compact, éifeachtach i ngairm fuisce seo i gcompledh le háit chónaithe oscailte, le cistin oibreálta, le seomra folctha agus le seomra codlata — pakáilte go maith isteach i gceann amháin den inbhall forbartha. Má tá áit agat don nádúr, is foinse iontach inspioráide é ár gcrích inbhuanaithe. Bíonn na fuinneoga móra agus na fuinneoga balla sleamhna le solas nádúrtha go minic, ag cruthú spás bheatha éadrom agus aerach. Tá deic dhofharach an-mhór ann chun suaimhneas a fháil in aice leis an nádúr. An féidir leat gníomhacht a dhéanamh ar an nguth atá ag na éin ag caspairt agus ar an ngrian ag sní tríd na crainn? Ag CDPH, tá plánaí taiscigh doras do thithe de gach cruth agus méid againn chun ag teacht ar gach riachtanas agus budgead. Cibé an bhfuil tú ag lorg baile beag nó baile níos mó, de stíl traidisiúnta, tá dearadh againn le freastal ar do riachtanais! Is féidir leár saoránaigh oibre leat chun a fháil amach cad a oireann don teaghlach is fearr. Ó fhórmhór, pleanáil fáis, go dtí na toinnill deiridh taobh istigh, cabhróidh muid leat spás coimeádta a dhearadh a léiríonn do rogha agus do phersainíocht. Is féidir le plean teach a bheith ina chúlán nó ina dheisigh eorpach luksus. Le cúpla seomra codlata, seomra folctha agus spásanna saoire, is plean ballafoiriéid é seo atá idéalach do dhuine ar mian leis níos mó spáis a bheith aige chun sileadh amach agus scaoileadh. Úsáid an dara staidéar mar fhógra príobháideach don úinéir, nó mar spás do ghaolta, agus déan é do dhócha féin chun do bheatha a mheaitseáil. Plean Ballafoiriéid Tigh Iadra Pleananna Ballafoiriéid Duit féin Má táimid riamh agat freastal ar theaghlach do theach féin a dhearbhú, anois is féidir leat an brionglóid sin a dhéanamh fíor le plean ballafoiriéid tigh idir . Le CDPH is féidir leat dearbhú de réir do chroí agus teach a thógáil atá 100% uathúil, ar gach bealach féidir ar feadh na huaire. Cibé go bhfuil tú ina chartlann ag iarraidh do theach idir faoi mhais féin a dhearbhú nó ina bainisteoir ghnó ag iarraidh do branda a leathnú, táimid ag tnúth le cabhrú leat an teach idir longlucht a bhfuil brionglóid ort a dhearbhú. Tosaigh anseo leárachán againne de plán teach container nó déan teagmháil linn chun dearbhúlacht a chruthú atá saincheaptha le cabhrú leat obair ó bhaile agus tú ag cur maoinimh ar do shaol i spás neamhghnách chomh áiteálach is féidir. Nuair a dhéanann tú cinneadh faoi phleanurlár, rachaimid ag comhoibriú leat chun an leagan amach agus na críocha a phearsanaíochtú ionas go mbeidh do theach ar fad do thithe féin. Is féidir leat do theach coimeádach a shaincheapadh suas leis na míreanna agus na dathanna a úsáideann tú go dtí na meaisíní agus na hardacháin a shuiteálann tú. Cabin Apple, cruth uathúil, taispeáint álainn, a dhéanann do bhaile níos pearsanta. Tá rogha leathan stíleanna agus dathanna ar fáil againn chun freastal ar do thuairimí pearsanta, ó stíl simplí comhaimseartha go dtí stíl traidisiúnta. Tá Beijing Chengdong dírithe ar phleananna urlár do theach ina bhfuil contaeinéir, agus is féidir iad a shaincheapadh de réir do riachtanais. Chun freastal ar do miananna agus do roghanna pearsanta, is féidir leat an dearadh, an t-earrach, agus na córais uisce agus leictreachais a shaincheapadh chun teach idéalach, uathúil a thógáil duit. Dhearna muid dearadh agus tógáil na gcórais leictreachais agus uisce roimh thógáil an tí, mar sin seachnaítear an tasc ama-chomhracach a dhéanamh arís ar chórais uisce agus leictreachais tar éis an tí a adhmadh, agus méadaítear éifeacht an adhmaid agus an cháilíochta. Is féidir leat roghnú ó rogha leathan réitigh don otharlann, don limistéar bia, don sheomra codlata, don chúilín, agus i bhfad níos mó. Saol cáilíochta, ón gCabin Apple! Tá Cabin Apple ina cheantar uathúil! Tír-chontéar, déan do bheith ag maireachtáil níos sábháilte agus níos comhfhreastalaí! Tá na comhpháirteanna struchtúrtha uile réamhtháirgeáilte i bhfabhrac. Trí rogha a dhéanamh ar na tomhais cheart, ar an gcomhdhéanamh agus ar an ndearadh is oiriúnaí, is féidir do spás beo a thógáil go tapa. Bunaithe ar riachtanais an chliant agus ar a roghanna, is féidir na modúil éagsúla a chomhcheangal chun leaganacha éagsúla a chruthú don seomra cistine, do phleananna urlár tír-chontéar agus do sheomraí codlata. Is é an rud is tábhachtaí gur féidir ár dtír-chontéar a scaradh agus a chur le chéile go héasca, tá an struchtúr stábla, tá an bheathas iontach, mar shampla: ina gcoimeád ón mbáisteach, ón mbradán, ón tine, agus tá an próiseas suiteála simplí agus éasca le rialú, gan aon leibhéal teicniúil a bheith de dhíth. Tá na tithe-contéar a thógaimid againn deartha chun freastal ar do riachtanais, an bhfuil sé do thionchar príobháideach nó do oifigí sealadacha, do stóráil, nó do chuspóir eile. Tá an t-am anois ann chun seomra bosca a cheannach, agus ceannach a dhéanamh ar dhuilleog íseal chomh maith le seirbhís cliant cuí. Leathnaigh do shaol trí sheomra contéar a cheannach! Tá dearadh struchtúrtha sonrach ag an dtithe réamhghníomhaithe agus tá pláiní urlár dteach contaiméar maith ann chun slándáil a chinntiú. Dearadh modúlach agus suiteáil éasca le haghaidh iompair, agus is féidir é a shaincheapadh de réir do rogha pearsanta de stíleanna éagsúla agus cineálacha seomraí. Tá gach comhpháirt réamhghníomhaithe agus éasca le socraíocht, gan baint le scileanna speisialta. An bhfuil sé mar oifig, mar áit chónaithe, mar stóráil nó mar aon úsáid eile, is féidir leis an dtithe réamhghníomhaithe freastal ar do riachtanais. Tá taispeántas stílúil air, línte gaothmhar aige, agus is féidir é a shaincheapadh de réir do rogha pearsanta chun spás cónaithe uathúil a chruthú. Is é an rud is fearr uile ná nach bhfuil reoiteacht ar an suíomh riachtanach do theach réamhghníomhaithe agus soláthraímid treoracha do shuiteáil chun do phróiseas suiteála a dhéanamh níos simplí agus níos tapúla. Glac le saol níos fearr le teachthe réamhghníomhaithe Chengdong. Teachthe réamhghníomhaithe Chengdong. Glacann an teach sclatacha leis an bhfoirmle oscailte a d’fhéadfaí a eagrú de réir do riachtanais chun táirgeadh a mhéadú agus cabhrú le do spás beatha a bheith níos slándála, tógtha go daingean agus tógtha go slándáil. Is féidir an seomra a chur le chéile ar bhealach a chomhlíonfaidh riachtanais éagsúla, ionas gur féidir leat fanacht i spás áineasach ar bith ann agus i gcónaí. Pleananna talún teach coimeádaimh! Tá forbairt agus pacaíocht an-fhasta. Bainimid úsáid as fhoireann phacaíochta ar scileanna de réir do riachtanais chun an seomra sclatach a phacáil ionas gur féidir leat an táirge is fearr a fháil. Nuair a bhíonn tú ag cur an táirge chuig an gcomharba, déanfaimid monatóireacht ar gach céim den phróiseas chun cinntiú go dtí go mbíonn na táirgí ag teacht go slán chuig an sprioc. Chun deireadhach, sclataíonn an seomra go héasca chun é a thógáil gan pleananna talún teach coimeádaimh. Soláthraímid treoracha suiteála freisin chun do shuiteáil a dhéanamh níos tapúla agus níos éifeachtaí. Nuair a leanann tú na céimeanna a léirítear sa treoirlitrí agus nuair a leanann tú na céimeanna, beidh tú in ann críochnú a chur le suiteáil do theach sclatach. Tógann agus déanann CDPH den scoth éagsúlta nádúrtha teach, teach príomhphobal agus teach fheist. Rang leathan nádúrtha againn a chuireann ar ár gcumas freastal ar chóras chun gach laghaire a sholáthar.Plánaí taiscigh doras do thithe
Plánaí taiscigh doras do thithe

Plánaí Taiscigh Dhoras do Gach Bealach sa tSaol

Féach ar Phlánaí Taiscigh Dhoras do Thithe

Dearaigh Do Thiúrthuileán le Plánaí Taiscigh Dhoras
Why choose CDPH
Plánaí taiscigh doras do thithe?
Stíl Módarnach cabin apple
Seomra díograis Maith
Nua-éagsúil teach réadaithe
Folláin ardchaighdeán
Catagóirí táirgí gaolacha
An bhfuil tú ag iarraidh rud éigin nach bhfuil ann?
Iarratas Praghsála Anois
Déan teagmháil le ár n-eagarthóirí le haghaidh táirgí breise ar fáil.Teagmháil
27+ Bliain De Sheirbhís
Buidheacht Laghairse